用表格数据绘制图表

时间:2018-01-11 06:57:10

标签: r dataframe charts

有没有以横向方式绘制桌子而不是垂直方式? 并绘制没有标签的表格?

我的代码:

Product <- c("Product1","Product2","Product3","Product4","Product5","Product6","Product7")
Value <- c(1000000,200002,599996,1399994,2199992,2999990,3799988)
df <- data.frame(Product,Value)
df$Product <- factor(df$Product, 
                     ordered = TRUE, 
                     levels = c("Product7","Product6","Product5","Product4","Product3",
                                "Product2","Product1"))

library(ggplot2)

p <- ggplot(df,aes(x=1,y=Value,fill=Product))+geom_bar(stat="identity")
p <- p + coord_polar(theta='y')+ 
  theme(axis.ticks=element_blank(),
        axis.text.y=element_blank(),
        axis.text.x=element_text(colour='black', size=12),
        axis.title=element_blank())
p <- p + scale_y_continuous(breaks=cumsum(df$Value) - df$Value / 2, 
                            labels= (paste(Product, 
                                           paste(round(((df$Value/sum(df$Value))*100),2),
                                                 "%"), 
                                           sep="\n")))
p <- p + guides(fill=FALSE)
p <- p + theme(panel.background = element_blank())

library(gridExtra)

t <- tableGrob(df)
grid.arrange(p,t)

enter image description here

我希望它像这样

enter image description here

1 个答案:

答案 0 :(得分:2)

您可以使用tableGrob(df)替换倒数第二行中的tableGrob(t(df))以转置数据帧,然后再将其传递给tableGrob()

如果您希望每个单元格中没有灰色背景的清洁外观,请使用:

tableGrob(t(df), theme = ttheme_minimal())

我还建议不要将其命名为t,因为它是基本包函数的名称。

最后,如果您想为饼图分配更多空间,可以指定c(1, 1)以外的其他高度比:

tt <- tableGrob(t(df), theme = ttheme_minimal())
grid.arrange(p, tt, heights = c(4, 1))

plot

附注:p的代码也可以简化为以下内容:

ggplot(df, aes(x = 1, y = Value, fill = Product,
               label = paste(Product, "\n",
                             scales::percent(Value / sum(Value))))) + 
  geom_col() + 
  geom_text(aes(x = 1.6), # change this to shift label. smaller x = closer to pie center
            position = position_stack(vjust = 0.5)) +
  coord_polar(theta = 'y') +
  theme_void() +
  guides(fill = FALSE)

说明:

  • geom_col()相当于geom_bar(stat = "identity");
  • aes()&amp;中设置饼图切片标签添加geom_text()图层通常比沿y轴自定义休息更清晰;
  • 使用percent()包中的scales,而不是手动将小数值转换为百分比格式;
  • theme_void()在一行中删除所有轴刻度,文本,标题,背景等。