2012-06-07 125 views
31

我正在做ggplot2中的水平點圖(?),這讓我想到要嘗試創建一個水平barplot。但是,我發現能夠做到這一點的一些限制。ggplot2中的水平Barplot

這裏是我的數據:

df <- data.frame(Seller=c("Ad","Rt","Ra","Mo","Ao","Do"), 
       Avg_Cost=c(5.30,3.72,2.91,2.64,1.17,1.10), Num=c(6:1)) 
df 
str(df) 

起初,我用下面的代碼生成一個點圖:

require(ggplot2) 
ggplot(df, aes(x=Avg_Cost, y=reorder(Seller,Num))) + 
    geom_point(colour="black",fill="lightgreen") + 
    opts(title="Avg Cost") + 
    ylab("Region") + xlab("") + ylab("") + xlim(c(0,7)) + 
    opts(plot.title = theme_text(face = "bold", size=15)) + 
    opts(axis.text.y = theme_text(family = "sans", face = "bold", size = 12)) + 
    opts(axis.text.x = theme_text(family = "sans", face = "bold", size = 12)) 

不過,我現在正試圖創建水平barplot並找到我我無法這樣做。我試過coord_flip(),那也沒有幫助。

ggplot(df, aes(x=Avg_Cost, y=reorder(Seller,Num))) + 
    geom_bar(colour="black",fill="lightgreen") + 
    opts(title="Avg Cost") + 
    ylab("Region") + xlab("") + ylab("") + xlim(c(0,7)) + 
    opts(plot.title = theme_text(face = "bold", size=15)) + 
    opts(axis.text.y = theme_text(family = "sans", face = "bold", size = 12)) + 
    opts(axis.text.x = theme_text(family = "sans", face = "bold", size = 12)) 

任何人都可以提供如何產生ggplot2水平barplot一些幫助?

回答

80
ggplot(df, aes(x=reorder(Seller, Num), y=Avg_Cost)) + 
    geom_bar(stat='identity') + 
    coord_flip() 

沒有stat='identity' ggplot希望將您的數據聚合到計數。

+1

ggplot2中的每個'geom'都有一個默認的'stat'。對於'geom_bar',默認的stat是'bin',因此Justin必須將其更改爲'identity'。默認爲bin的其他兩個geom都是'freqpoly',當然還有'histogram'。 – Pete