2015-04-23 150 views
5

我需要繪製三個值,以便爲X軸的每個值繪製三個值。我的數據是: My dataframe DF如何在R中爲相同的X軸值繪製多列

在X軸必須是標記爲「m」的列,並且對於每個「m」值,我需要繪製對應的「x」,「y」和「z」值。

我想用GGPLOT2,我需要這樣的:

Goal

+0

你能提供一些可再現的數據來證明你想要完成什麼? – cdeterman

+0

請在樣本輸入數據中包含[可重現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example),並顯示您編寫的任何代碼遠。 – MrFlick

+0

對不起,它一開始沒有上傳,我得到了一些問題與圖片 –

回答

6

我創建了自己的數據集來演示如何做到這一點:

數據:

x <- runif(12,1,1.5) 
y <- runif(12,1,1.5) 
z <- runif(12,1,1.5) 
m <- letters[1:12] 
df <- data.frame(x,y,z,m) 

解決方案:

#first of all you need to melt your data.frame 
library(reshape2) 
#when you melt essentially you create only one column with the value 
#and one column with the variable i.e. your x,y,z 
df <- melt(df, id.vars='m') 

#ggplot it. x axis will be m, y will be the value and fill will be 
#essentially your x,y,z 
library(ggplot2) 
ggplot(df, aes(x=m, y=value, fill=variable)) + geom_bar(stat='identity') 

輸出:

enter image description here

如果你想吧一個挨着你需要geom_bar指定dodge位置,即對方:

ggplot(df, aes(x=m, y=value, fill=variable)) + 
     geom_bar(stat='identity', position='dodge') 

enter image description here

+0

非常感謝你,你的解決方案拯救了我。 您是否知道如何避免X軸值按字母順序排列? –

+0

不客氣:)很高興我可以幫忙。有關於更改訂單的非常好的答案[這裏](http://stackoverflow.com/questions/3253641/how-to-change-the-order-of-a-discrete-x-scale-in-ggplot) (第二個答案,而不是接受的答案)。你需要在'limits'參數中使用'scale_x_discrete'。 – LyzandeR

相關問題