我有以下数据:
Method Metric E0 E1 E2 E4
1 M1 Precision 0.9661017 0.9622642 1.0000000 0.9655172
2 M2 Precision 0.5330000 0.5350000 0.3780000 0.2140000
3 M1 Recall 0.9736842 0.9736842 0.9473684 0.9473684
4 M2 Recall 1.0000000 1.0000000 1.0000000 0.6670000
我想要做的是将以上数据创建到以下图中:
在此草图中,条形图的高度肯定不会反映上面的数据。
这样做的方法是什么? 可以使用ggplot或lattice之类的外部库。
答案 0 :(得分:4)
我意识到你正试图避免使用外部库,但ggplot
旨在简化这一过程。
library(ggplot2)
library(reshape2)
gg <- melt(df,id=1:2)
ggplot(gg) +
geom_bar(aes(x=Method, y=value, fill=Metric), stat="identity",
position="dodge")+facet_wrap(~variable)
答案 1 :(得分:3)
你走了:
导入:
dat <- read.table(text="Method Metric E0 E1 E2 E4
M1 Precision 0.9661017 0.9622642 1 0.9655172
M2 Precision 0.533 0.535 0.378 0.214
M1 Recall 0.9736842 0.9736842 0.9473684 0.9473684
M2 Recall 1 1 1 0.667",header=TRUE)
定义布局和一些颜色:
layout(matrix(c(1,2,5,3,4,5),nrow=2,byrow = TRUE))
# [,1] [,2] [,3]
#[1,] 1 2 5
#[2,] 3 4 5
barcols <- c("red","blue")
生成一些图:
sapply(3:6,
function(x) {
bp <- barplot(matrix(dat[,x],nrow=2,byrow=TRUE),beside=TRUE,col=barcols)
title(main=names(dat[x]))
axis(1,at=colMeans(bp),c("M1","M2"),lwd=0,lwd.tick=1)
abline(h=0)
}
)
添加图例:
plot(NA,xlim=c(0,1),ylim=c(0,1),ann=FALSE,axes=FALSE)
legend(0,0.6,c("Precision","Recall"),fill=barcols,cex=1.5)
结果: