我有一个单独的R代码,它可视化了一个多线图,其中每行对应于一类数据。在代码中,类别被赋予我的变量 nk:我的数据集如下所示:
k precision recall
0.25 0.02 1.011
0.25 0.04 1.011
0.5 0.15 0.941
0.5 0.17 0.931
0.5 0.18 0.921
0.5 0.19 0.911
1.0 0.36 0.831
1.0 0.39 0.811
1.0 0.41 0.801
问题是它只可视化 k = 1.0 的线,而不是 k = 0.5 和 0.25 的线我的问题是 ?我如何使用不是一个整数为了可视化 k = 0.5 或 0.25 的线?
dtf$k <- as.numeric(dtf$k)
nk <- max(dtf$k)
xrange <- range(dtf$precision)
yrange <- range(dtf$recall)
plot(xrange, yrange,
type="n",
xlab="Precision",
ylab="Recall"
)
colors <- rainbow(nk)
linetype <- c(1:nk)
plotchar <- seq(18, 18+nk, 1)
for (i in 1:nk) {
Ki <- subset(dtf, k==i)
lines(Ki$precision, Ki$recall,
type="b",
lwd=2,
lty=linetype[i],
col=colors[i],
pch=plotchar[i]
)
}
title("Methods varying K", "Precision Recall")
legend(xrange[1], yrange[2],
1:nk,
cex=1.0,
col=colors,
inset=c(-0.2,0),
pch=plotchar,
lty=linetype,
title="k"
)
data
dtf <- read.table(header = TRUE, text = 'k precision recall
0.25 0.02 1.011
0.25 0.04 1.011
0.5 0.15 0.941
0.5 0.17 0.931
0.5 0.18 0.921
0.5 0.19 0.911
1.0 0.36 0.831
1.0 0.39 0.811
1.0 0.41 0.801')
dtf$k <- factor(dtf$k)
ggplot2 解决方案
require(ggplot2)
ggplot(dtf, aes(x = precision, y = recall, col = k)) +
geom_line()
基础解决方案
plot(recall ~ precision, data = dtf, type = 'n')
cols = c('red', 'blue', 'green')
levs <- levels(df$k)
for(i in seq_along(levs)){
take <- df[df$k == levs[i], ]
lines(take$precision, take$recall, col = cols[i])
}