2015-03-03 87 views
0

任何人都可以帮助在R中使用ggplot2来显示一个barplot,我需要在x轴上显示列(第一,第二,第三,第四,第五)和他们的值在y轴上?而不显示列“uname”。使用ggplot2在barplot中显示多个数字列?

> head(golQ1Grades) 
       qname   uname first second third fourth fifth 
1 onlinelernen_quiz_1   xxx 100  0  0  0  0  
2 onlinelernen_quiz_2  xxxx 100  0  0  0  0  
3 onlinelernen_quiz_4  xxxx  42  71  0  0  0  
4 onlinelernen_quiz_7  xxxx  85 100  0  0  0  
5 onlinelernen_quiz_1  xxx  85 100  0  0  0  
6 onlinelernen_quiz_3   xxxx 71  0  0  0  0  

感谢您的高级帮助。

+0

你能否澄清一下,如果你想显示所有的单个值或列的平均值第一,第二......? – 2015-03-03 10:03:00

回答

0

这是我的猜测,你想显示在Y轴上的平均值。

library(ggplot2) 

数据

dat<-data.frame(c(100,100,42,85,85,71), c(0,0,71,100,100,0), c(0,0,0,0,0,0), c(0,0,0,0,0,0), c(0,0,0,0,0,0)) 
names(dat)<-NULL 

计算平均值和获得新的数据

v1<-apply(dat, 2, mean) 
nv1<-c("first","second","third", "fourth","fifth") 
ndat<-data.frame(nv1, v1) 

情节

p <- ggplot(ndat, aes(factor(nv1), v1)) 
p + geom_bar(stat="identity") 
+0

谢谢你,现在有道理:) – 2015-03-03 10:34:05

+0

嗨穆罕默德,如果你喜欢答案,你有可能得到upvote&接受它作为答案在Stackoverflow! – 2015-03-03 11:19:38

+0

你好,Ruthger,问题是我有6的声望,我不能upvote,直到我达到15。 – 2015-03-03 11:21:48

0

我认为更好的选择是dplyrtidyr .E.g 。 (我改变data.frame一点)

library(dplyr) 
library(tidyr) 
library(ggplot2) 

df <- data.frame(qname = letters[1:10], 
          first = seq(1,10,1), 
          second = seq(10,100,10), 
          third = seq(2,20,2)) 

然后用gather功能:

df <- df %>% 
    gather(variable, value, -qname) 
你的情况

这将是

df <- golQ1Grades %>% 
    gather(variable,value, -qname, -uname) 

Futhermore,而不是计算平均值,也非常有帮助facet_grid

ggplot(df, aes(factor(qname),value))+ 
    geom_bar(stat = "identity")+ 
    facet_grid(.~variable)