如何在图表中添加表格?

3

我使用以下命令创建了一个躲避的条形图:

a = c(1,1,1,1,1,1,1,2,2,2,2,2,2,2) 
b = c("A","A","A","B","B","B","B","C","C","D","D","D","D","D") 
c = c(60,20,20,80,5,5,5,50,50,25,25,25,20,5) 
dat = data.frame(Group=a, Member=b, Percentage=c) 
ggplot(dat, aes(x=Member, y=Percentage)) + geom_bar(stat="identity", position="dodge", fill="white", colour="black") 

如果我有一组值:

table_values = c("2", "4", "2", "1")
table_total = c("A", "B", "C", "D")
tab = data.frame(Type=table_total, Value=table_values)

如何将这个表格添加到我的图表中,使其对齐?类似于下面的这张图片:
我可以手动完成这个过程,但是我需要生成很多图表,所以想知道是否可以自动化。有什么建议吗?
1个回答

8

这是一种有些取巧的方法,但是你可以使用geom_text进行注释,将文本放置在略微负的y值上。这样可以将其放入绘图区域而不是轴下方。

ggplot(dat, aes(x=Member, y=Percentage)) + 
  geom_bar(stat="identity", position="dodge", fill="white", colour="black") +
  geom_text(aes(x=table_total, label=table_values), y=-2, data=tab)

使用geom_text在图中制作类似表格的内容

更为细致的方法是创建两个不同的图,一个是柱状图,一个是“表格”(关闭几乎所有主题元素),并使用ggExtra包中的align.plots(不确定是否是正确名称)进行对齐。


非常感谢。完美运作!不过有一个快速的问题:当我指定-2时,ggplot不会在Y轴上显示该数字,所以一切都很好。但是如果我指定-20,它会显示。有没有办法让ggplot显示0,80的值,但仍然在-20处绘制值?如果太混乱了,我会尝试换一种方式表达。 - Legend
您可以指定哪些值在坐标轴上添加标签。例如,您可以添加“+scale_y_continuous(breaks=c(0,20,40,60,80))”。 - Brian Diggs
@Brian,话说一句,你看见左边第四个条的位置比其他的稍微低一些吗?这跟我们昨天办公室里发生的情况很相关,我们一直在努力弄清楚是怎么回事...不知道你有什么想法吗? - nzcoops
1
@nzcoops,这是一个已知的错误 https://stat.ethz.ch/pipermail/r-help/2011-July/284014.html - Brian Diggs
谢谢Brian,我想这一定是版本问题,因为我在我的MacBook或Linux服务器上无法复制,而我的同事在家里使用最新版本的Windows时也遇到了问题(我仍在使用2.13)。干杯。 - nzcoops

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接