2010-03-31 113 views
13

我试图在barplot内显示频率...我想要他们某处在图中:在酒吧下方,酒吧内,酒吧上方或图例区域中。我记得(我可能是错的),它可以在ggplot2完成。这可能很简单...至少看起来很简单。代码如下:在ggplot2中显示频率和barplot

p <- ggplot(mtcars) 
p + aes(factor(cyl)) + geom_bar() 

有没有可能让频率嵌入图中?

回答

18

geom_text是从基地图形text THA类似物:

p + geom_bar() + stat_bin(aes(label=..count..), vjust=0, 
          geom="text", position="identity") 

如果要调整的标签的y位置,则可以使用y=审美内stat_bin:例如,y=..count..+1将标签放在酒吧上方一个单位。

上面也适用如果你使用geom_textstat="bin"里面。

+0

对于标签,为什么在计数之前和之后有“..”? – 2015-04-12 17:19:57

+1

'..count..'是包含'stat_bin'自动创建的bin频率的变量的名称。所以在它之前和之后的两个时期是变量名称的一部分 – Aniko 2015-04-14 20:45:17

+0

这个答案给我一个错误'错误:stat_count需要以下缺失的美学:x'。但是,在'p + aes(factor(cyl))+ geom_bar()+ stat_count(aes(label = .. count)'中加入'aes(factor(cyl))'并将'stat_bin'改为'stat_count'。 。),vjust = 0,geom =“text”,position =“identity”)'确实有效。 – steveb 2017-09-14 17:58:34

0

如果您不限于ggplot2,可以使用来自plotrix软件包的基本图形文件或boxed.labels文本。

4

难以实现。我相信有更好的方法。

ggplot(mtcars,aes(factor(cyl))) + 
geom_bar() + 
geom_text(aes(y=sapply(cyl,function(x) 1+table(cyl)[names(table(cyl))==x]), 
label=sapply(cyl,function(x) table(cyl)[names(table(cyl))==x]))) 
+11

这是比较好的做法是创建你的绘制代码数据_outside_。将数据推入审美映射是一个不错的主意。 – hadley 2010-03-31 14:31:15

0

如果想要添加不同的信息了以下工作:

ggplot(mydata, aes(x=clusterSize, y=occurence)) + 
geom_bar() + geom_text(aes(x=clusterSize, y=occurence, label = mydata$otherinfo)) 
+0

您能否通过提供一个引用'datasets'包(或CRAN仓库中可用的其他包)中可用数据的示例复制此答案?我怀疑barplot是否可以使用指定的“y”变量来绘制“...”... – aL3xa 2010-06-08 01:07:39