2013-10-28 75 views
0

似乎ggplot2應該能夠使用geom_text標記堆疊條形圖,並在geom_bar中對數據框的子集執行統計統計,而無需重新創建新的數據幀專門用於標籤。這可能嗎?在ggplot2中爲stat =「bin」標記堆積條形圖

這是我的數據幀是什麼樣子:

> head(df.m2) 
Community  Categories    Indicators Code Scores Condition 
1 Zaragoza   Landscape Landscape \n Composition f01.1  0 Marginal 
2 Zaragoza   Landscape    Windbreaks f01.1  6 Acceptable 
3 Zaragoza   Landscape  Field \n Location f01.1  6 Acceptable 
4 Zaragoza   Landscape  Soil \n Conservation f01.1  12 Optimal 
5 Zaragoza Farmer Management   Crop \n Rotation f01.1  12 Optimal 
6 Zaragoza Farmer Management  Crop \n Varieties f01.1  6 Acceptable 

這裏是我使用創建我的陰謀(注意用來總結分類變量的STAT =「BIN」)的代碼:

p <- ggplot(df.m2, aes(Indicators, fill=Condition)) 
p + coord_cartesian(ylim=c(-.3,12.3)) + 
geom_bar(stat="bin", colour="gray", alpha=.7) + 
scale_fill_manual(values = c("green","yellow","red")) + 
theme(axis.text.x = element_text(angle = 90,vjust= .5,hjust=1)) + 
labs(x = "Farmers' Indicators", y = "Number of Rankings by Farmers") + 
facet_grid(Community ~ Categories, scales = "free_x") 

我想包括最終的情節,但我的聲望水平不允許它。我想要的是在每個相應的欄上打印和居中計數。

+0

請[在SO搜索](http://stackoverflow.com/search?q= [ggplot] + label + stacked + bar),我相信你會找到幾個很好的例子,你可以適應你的自己的數據。 – Henrik

+0

@Henrik是的,我在發佈之前,今天搜索了大約3個小時。我沒有讀到具體解決我的問題。從我所知道的情況來看,解決方案非常複雜,並且使用plyr和其他類似的包來操縱數據,而不是簡單地使用ggplot的統計功能。如果您正在考慮某個帖子,歡迎與我分享。 – proge

回答

0

我會使用這個data.table包。它仍然不起作用,只有ggplot的能力。通常最好先做數據調整,然後使用ggplot

require(data.table) 
dt.m2 <- data.table(df.m2) 
dt.m2[, count:=.N, by=list(Indicators, Categories)] # create the count index 
# almost the same as before 
p <- ggplot(dt.m2, aes(Indicators, fill=Condition)) 
p + coord_cartesian(ylim=c(-.3,12.3)) + 
    geom_bar(stat="bin", colour="gray", alpha=.7) + 
    geom_text(aes(y=count+1, label=paste0("n=", count))) + # add text above bar 
    # you may have to change the y position for this to look good 
    scale_fill_manual(values = c("green","yellow","red")) + 
    theme(axis.text.x = element_text(angle = 90,vjust= .5,hjust=1)) + 
    labs(x = "Farmers' Indicators", y = "Number of Rankings by Farmers") + 
    facet_grid(Community ~ Categories, scales = "free_x") 
+0

感謝您的建議,我將不得不問ggplot2有關在未來版本中添加stat =「bin」的標籤。我還沒有弄清楚如何讓你的解決方案工作。錯誤比比皆是,產生的計數不適合我想要做的標記。但是,這更像是我的情節中的一個特定問題,而不是與我所問的問題通常有關,所以不要緊隨其後。謝謝您的幫助。 – proge