Tôi muốn vẽ một số cột của ma trận dữ liệu dựa vào một cột, vì vậy thay vì vẽ từng cột riêng lẻ, tôi đang sử dụng vòng lặp. Vấn đề là tên cột được vẽ và màu phải biến nếu tôi sử dụng vòng lặp. Tôi thử như sau:Chuyển màu thành biến 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
Nhưng khi tôi chạy này, tôi nhận được lỗi sau:
Error in eval(expr, envir, enclos) : object 'D2' not found
Làm thế nào có thể màu (hoặc bất kỳ giá trị khác) được thông qua như là một biến trong aes_string? Cảm ơn trước.
Dữ liệu để thử nghiệm có sẵn here.
Bạn cũng có thể cung cấp mẫu dữ liệu của mình không? thử sử dụng 'dput (head (plotData, 100))' và dán đầu ra của giao diện điều khiển vào câu hỏi của bạn. –
FYI - lỗi có nghĩa là cột 'D2' không thực sự có mặt trong khung dữ liệu' plotdata'. Điều đó nói rằng, có khả năng một cách khác (tốt hơn) để đạt được những gì bạn đang yêu cầu, mà không cần sử dụng vòng lặp for. –
Nhưng vấn đề dường như là với giá trị "màu" mà tôi đang đi qua. Nếu tôi xóa màu khỏi aes_string thì cốt truyện sẽ hoạt động. Dù sao, nó sẽ rất hữu ích nếu bạn có thể cho tôi biết làm thế nào để làm điều này tốt hơn và một cách thích hợp. – Dronacharya