2010-09-27 105 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