我想繪製一列數據矩陣的幾列,所以不是單獨繪製每列,而是使用一個循環。問題是如果我要使用循環,要繪製的列名和顏色必須是可變的。我試過如下:將顏色作爲變量傳遞給aes_string
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。
你能提供你的數據樣本嗎?嘗試使用'dput(head(plotData,100))'並將控制檯的輸出粘貼到你的問題中。 –
僅供參考 - 錯誤意味着「D2」列實際上不存在於「plotdata」數據框中。也就是說,可能有另一種(更好的)方式來實現你所要求的,而不使用for循環。 –
但問題似乎與我所傳遞的「顏色」值有關。如果我從aes_string中刪除顏色,則情節起作用。無論如何,如果你能告訴我如何更好地以適當的方式做到這一點,這將是非常有益的。 – Dronacharya