有没有以横向方式绘制桌子而不是垂直方式? 并绘制没有标签的表格?
我的代码:
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)
我希望它像这样
答案 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))
附注: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()
在一行中删除所有轴刻度,文本,标题,背景等。