2010-03-31 44 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