gpt4 book ai didi

r - 将颜色作为变量传递给 aes_string

转载 作者:行者123 更新时间:2023-12-02 07:18:05 25 4
gpt4 key购买 nike

我想针对一列绘制数据矩阵的几列,因此我使用循环,而不是单独绘制每一列。问题是,如果我要使用循环,要绘制的列名称和颜色必须是可变的。我尝试了以下方法:

allDs <- sort(unique(plotdata$D))
p <- ggplot(plotdata, aes(SpaceWidth))
for (thisD in allDs) {
tlColName <- paste("M2D", thisD, "Tl", sep="")
colorName <- paste("D", thisD, sep="")
p <- p + geom_line(data = plotdata[!is.na(plotdata[[tlColName]]),], aes_string(y = tlColName, color = colorName))
}
p <- p + scale_colour_manual("Legend", values = c("D2" = "blue", "D3" = "red", "D4" = "green", "D6" = "violet", "D7" = "yellow" ))
p <- p + scale_x_log10(breaks = composite$SpaceWidth)
p <- p + facet_wrap(~ Drawn, ncol = 3)
p <- p + labs(title = "Fu plot", y = "MTN")
p

但是当我运行这个时,我收到以下错误:

Error in eval(expr, envir, enclos) : object 'D2' not found

如何将颜色(或任何其他值)作为 aes_string 中的变量传递?提前致谢。

测试数据可用here .

最佳答案

错误的原因非常不言自明:原始数据集中不存在 D2。请注意,您可以将颜色直接映射到变量 D,因此您的 colorName 构造是多余的。看看这个:

allDs <- sort(unique(plotdata$D))
plotdata$D <- as.factor(plotdata$D)
p <- ggplot(plotdata, aes(SpaceWidth, color=D))
for (thisD in allDs) {
tlColName <- paste("M2D", thisD, "Tl", sep="")
p <- p + geom_line(data = plotdata[!is.na(plotdata[[tlColName]]),],
aes_string(y = tlColName))
}
p <- p + scale_colour_manual("Legend",
values = c("blue", "red", "green", "violet", "yellow"))
p <- p + scale_x_log10(breaks = plotdata$SpaceWidth)
p <- p + facet_wrap(~ D, ncol = 3)
p <- p + labs(title = "Fu plot", y = "MTN")
p

请注意,要正确映射颜色,您需要首先将其转换为因子。 enter image description here

UPD:好吧,让我向您展示如何摆脱 for 循环,这通常不是一个好的做法。

library(reshape2)
melt.plotdata <- melt(plotdata, id.vars=c("SpaceWidth", "D"))
melt.plotdata <- melt.plotdata[order(melt.plotdata$SpaceWidth), ]
melt.plotdata <- na.omit(melt.plotdata)
q <- ggplot(melt.plotdata, aes(SpaceWidth, value, colour=variable)) + geom_path()
q + scale_colour_manual("Legend",
values = c("blue", "red", "green", "violet", "yellow")) +
scale_x_log10(breaks = melt.plotdata$SpaceWidth) +
facet_wrap(~ D, ncol = 3) +
labs(title = "Fu plot", y = "MTN")

该情节与我上面发布的情节相同。

关于r - 将颜色作为变量传递给 aes_string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20650373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com