[英]Barplot using ggplot
我有一個數據框
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到5)
無需使用rbind創建數據框或創建矩陣就可以做到這一點? 任何幫助將不勝感激。
不更改數據格式就無法做到這一點,但這並不難。
您可以使用reshape2包的melt選項。
我為您的數據創建了一個數據框:
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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.