2013-02-03 150 views
2

新除了我以前的帖子:使用GGPLOT2來繪製一組數據

我道歉,如果它看起來好像我期待任何人都可以做的工作對我來說!這絕對不是我的意圖。

使用dput,輸出給了我下面的:

structure(list(Reported.Behavior = structure(c(3L, 6L, 2L, 1L, 
8L, 7L, 4L, 5L), .Label = c("Alcohol-marijuana", "Depression/Suicidal Ideation", 
"Homophobic Teasing", "Parent Communication", "Parent Support", 
"Peer Victimization", "Racism", "School climate"), class = "factor"), 
    Heterosexual.Mean = c(0.2, 0.45, 0.63, 0.8, 1.79, 0.61, 1.89, 
    3.31), Heterosexual.SD = c(0.66, 0.75, 0.67, 0.97, 0.49, 
    0.67, 0.95, 0.65), Questioning.Mean = c(0.84, 0.95, 1.07, 
    1.36, 1.63, 1.03, 1.79, 2.83), Questioning.SD = c(1.33, 1.18, 
    0.95, 1.51, 0.65, 0.82, 1.13, 0.93), LGB.Mean = c(0.57, 0.56, 
    0.77, 1, 1.72, 0.82, 1.84, 3.14), LGB.SD = c(1.13, 0.9, 0.82, 
    1.16, 0.56, 0.76, 1.07, 0.8), ANOVA.F.Value = c(375.94, 166.54, 
    176.54, 138.82, 49.13, 193.31, 5.63, 231.73), ANOVA.Effect.Size = c(0.05, 
    0.03, 0.03, 0.02, 0.01, 0.03, 0, 0.03)), .Names = c("Reported.Behavior", 
"Heterosexual.Mean", "Heterosexual.SD", "Questioning.Mean", "Questioning.SD", 
"LGB.Mean", "LGB.SD", "ANOVA.F.Value", "ANOVA.Effect.Size"), class = "data.frame", row.names = c(NA, 
-8L)) 

我曾嘗試過各種ggplot命令,如以下幾種:(我的數據集名= LGBTQ)

ggplot(All.Means ,aes(Mean.Values,Homophobic.Teasing,color = Mean.Values))+ geom_bar()

但是,這隻會產生同性戀戲弄手段的圖表。我試圖找到一種方法將所有的行爲方式放在同一個圖表上(即並排的酒吧,由性取向的顏色編碼)

我試圖通過生成csv文件來操作數據,只包含一種行爲。例如:

ggplot(data = Peer.Victimization.Means, aes(x = Mean.Values, y = Peer.Victimization, color = Mean.Values)) + geom_bar(color = "black", fill = "red") 

這有效,但是,我想找到一種方法來利用整個數據集,就像。

我已經看到帖子提到'融化'功能,但尚未成功與此。 :/ 任何建議將不勝感激!

這是我第一次使用「R」,所以請知道,我非常初學者。對於一門課程作業,我使用的是下面幾列標題的數據集:

報道行爲(包括8個不同的行爲名稱) 異性平均值(包括每個行爲的值) 質疑平均值(包括每個值行爲) LGB均值(包括每個行爲的值)

我想用ggplot2來繪製這些數據。如果我能夠生成具有以下條形圖的條形圖將是理想的:

Y軸:「平均值」 X軸:「報告的行爲」,對於每個報告的行爲,我希望有3個單獨的條形,並排(異性平均值,質疑平均值和LGB平均值)。那麼,如果我可以爲這些顏色編碼,這將是理想的。因此,總的來說,Y軸代表平均值,X軸列出所有報道的行爲,每個行都有3個槓,比較3種不同的性行爲。任何幫助將不勝感激!!!!

傑西

+5

歡迎堆棧溢出。一般來說,SO成員在看到詢問的人已經努力解決問題時,更願意回答問題。要求基本上爲你做所有的工作是不行的。因此,您應該採取的第一步是通過編輯/添加上面的問題向我們展示您已經編寫了哪些R代碼。第二步是向我們展示(部分)您的數據。 'dput'函數是有用的;在R提示符處輸入'?dput'以獲得幫助。另見[這篇文章](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – SlowLearner

+0

此外,如果您需要更多幫助來獲得R和ggplot2的基礎知識,請與您的課程主管聯繫。他們的工作是幫助你學習基礎知識。 –

回答

2

重新排列數據:

library(reshape2) 
mdat <- melt(dat[,1:7]) ## Drop ANOVA vars 
mdat <- data.frame(mdat,colsplit(mdat$variable,"\\.",c("type","val"))) 
cdat <- dcast(mdat,Reported.Behavior+type~val) 

繪製圖片。

library(ggplot2) 
ggplot(cdat,aes(x=Reported.Behavior,y=Mean,fill=type))+ 
    geom_bar(stat="identity",position="dodge")+ 
    ## ugly! 
    ## geom_linerange(aes(ymin=Mean-SD,ymax=Mean+SD), 
    ## position=position_dodge(width=0.9))+ 
    coord_flip() 
  • coord_flip()是好的,因爲它可以更容易地讀取標籤。
  • 這裏有註釋掉的代碼來添加顯示+/- 1 SD的行 - 我沒有添加它們,因爲SD太大以至於情節相當醜陋 - 您應該考慮一下......
  • 巴圖很熟悉,但geom_point()可能是更漂亮(少「非數據墨水」 意義上塔夫特)

enter image description here