【发布时间】:2013-02-18 17:26:48
【问题描述】:
我正在尝试使用 ggplot 在 R 中绘制堆积条形图。我还想在每条条中包含该条的百分比。我试图关注1、2、3 的帖子,但这些值并不完全在它们各自的块中。我的数据是dropbox中的一个文件。
我的代码如下:
f<-read.table("Input.txt", sep="\t", header=TRUE)
ggplot(data=f, aes(x=Form, y=Percentage, fill=Position)) +
geom_bar(stat="identity", colour="black") +
geom_text(position="stack", aes(x=Form, y=Percentage, ymax=Percentage, label=Percentage, hjust=0.5)) +
facet_grid(Sample_name ~ Sample_type, scales="free", space="free") +
opts(title = "Input_profile",
axis.text.x = theme_text(angle = 90, hjust = 1, size = 8, colour = "grey50"),
plot.title = theme_text(face="bold", size=11),
axis.title.x = theme_text(face="bold", size=9),
axis.title.y = theme_text(face="bold", size=9, angle=90),
panel.grid.major = theme_blank(),
panel.grid.minor = theme_blank()) +
scale_fill_hue(c=45, l=80)
ggsave("Output.pdf")
输出是-
非常感谢任何帮助。 感谢您的帮助和时间!
【问题讨论】:
-
想想你给
geom_text的y值。它是每个条形段的高度。您需要做一些算术来计算每个条形段的中点(或顶部,或其他),将其添加为单独的变量并将其用作geom_text中的 y 变量。cumsum函数可能会有所帮助。 -
这样的东西会计算每个条形段中点的标签的y位置:
f <- ddply(f, .(Form, Sample_name, Sample_type), transform, pos = (cumsum(Percentage) - 0.5 * Percentage))(需要plyr),那么geom_text语句应该是:geom_text(aes(x=Form, y=pos, label=Percentage))