我有一个像
这样的数据框 Model1 Model2 Model3 Model4
4 4 5 5
4 4 NA NA
3 2 5 5
2 2 3 3
3 3 3 3
3 3 4 4
我想绘制像
这样的条形图
x轴将具有Model1,Model2,Model3和Model4,并且条形将是每列中得分的比例,即每个模型的6个柱(在完整数据中我得分从0到0) 5)
如何在不使用rbind创建数据框或创建矩阵的情况下完成此操作? 任何帮助将不胜感激。
答案 0 :(得分:2)
如果不改变数据格式,就无法做到这一点,但这并不困难。
您可以使用reshape2包的熔化选项。
我创建了数据的数据框:
df1<-data.frame("Model1"=c(4,4,3,2,3,3),
"Model2"=c(4,4,2,2,3,3),
"Model3"=c(5,NA,5,3,3,4),
"Model4"=c(5,NA,5,3,3,4))
Model1 Model2 Model3 Model4
1 4 4 5 5
2 4 4 NA NA
3 3 2 5 5
4 2 2 3 3
5 3 3 3 3
6 3 3 4 4
接下来,您可以使用reshape2包重新整形数据:
library(reshape2)
df2<-melt(df1)
variable value
1 Model1 4
2 Model1 4
3 Model1 3
4 Model1 2
5 Model1 3
6 Model1 3
7 Model2 4
8 Model2 4
9 Model2 2
10 Model2 2
11 Model2 3
12 Model2 3
13 Model3 5
14 Model3 NA
15 Model3 5
16 Model3 3
17 Model3 3
18 Model3 4
19 Model4 5
20 Model4 NA
21 Model4 5
22 Model4 3
23 Model4 3
24 Model4 4
为了方便重命名列:
names(df2)<-c("Model","Score")
然后计算比例:
df3 <- as.data.frame(table(df2))
df3$prop<-df4$Freq/4*100
最后,情节:
ggplot(df3,aes(x=Model,y=prop,fill=as.factor(Score)))+
geom_bar(stat="identity",position="dodge")+
xlab("Models")+
ylab("Prop. of Cases (%)")+
ggtitle("Sample Data")+
guides(fill=guide_legend(title="Scores"))+
scale_fill_manual(values = c("2" = "lightblue", "3" = "mistyrose","4"="lightcyan","5"="lavender"))+
theme_bw()