2010-09-27 104 views
5

我想要做的是在下面的例子中标记两个geom_bar()以及它们各自的数据标签。到目前为止,我只能得到一个或另一个展现出来:ggplot2标记一个多层柱状图

dput():

x <- structure(list(variable = c("a", "b", "c"), f = c(0.98, 0.66, 
0.34), m = c(0.75760989010989, 0.24890977443609, 0.175125)), .Names = c("variable", 
"f", "m"), row.names = c(NA, 3L), class = "data.frame") 

ggplot(x, aes(variable, f, label=paste(f*100,"%", sep=""))) + 
geom_bar() + 
geom_text(size=3, hjust=1.3, colour="white") + 
geom_bar(aes(variable, m, label=paste(m*100,"%",sep="")), fill="purple") + 
coord_flip() 

Multilayered Bar Graph

了解如何对黑的里面有一个数据标签。在同一个情节中,我想在紫色的内部做同样的事情。

回答

6

请问这是怎么对你的工作:

ggplot(x, aes(variable, f, label=paste(f*100,"%", sep=""))) + 
geom_bar() + 
geom_text(size=3, hjust=1.3, colour="white") + 
geom_bar(aes(variable, m, label=paste(m*100,"%",sep="")), fill="purple") + 
geom_text(aes(y=m,label=paste(round(m*100),"%",sep="")),size=3, hjust=1.3, colour="white") + 
coord_flip() 
+0

我非常接近!我尝试了geom_text()的这种分层,但有一点不同的审美。谢谢! – 2010-09-27 23:08:51

3

你可能要考虑不同的方法。

如果图表的主要目标是比较条的长度/位置,那么在条上包含数字会产生“模糊”条,这使得眼睛/大脑难以正确判断长度/位置酒吧。

如果主要目标是比较数字,那么您所拥有的是布局不良的桌子(具有彩色背景),如果它们正确排列,则比较数字会更容易。一些替代方案将包括具有单独的图形和表格(两者都正确布置),或将数字放在边距(正确对齐)而不是放在条的顶部,或者在边缘单元格中创建带有条形图的表格。您可能还想考虑一个点图而不是条形图(ggplot2应该仍然可以很容易地做到这一点),堆叠条只允许合理比较第一个(最左边)类别和总数,在您的示例中不容易比较顶杆和底杆的黑色部分的相对尺寸。

+1

就我个人而言,我的投票是针对一个dotplot,但有些事情老板不会让你改变。 – 2010-09-28 16:51:23