2013-02-03 54 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