Chcę wykreślić kilka kolumn macierzy danych względem jednej kolumny, więc zamiast rysować każdą kolumnę osobno, używam pętli. Problem polega na tym, że nazwa kolumny do wykreślenia i kolor muszą być zmienne, jeśli mam użyć pętli. Próbowałem następujące:Przekazywanie koloru jako zmiennej do aes_stringa
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
Ale gdy uruchomię to pojawia się następujący błąd:
Error in eval(expr, envir, enclos) : object 'D2' not found
Jak kolor (lub jakakolwiek inna wartość) być przekazywane jako zmiennej w aes_string? Z góry dziękuję.
Dostępne są dane do testów here.
Czy możesz podać próbkę swoich danych? spróbuj użyć 'dput (head (plotData, 100)) i wklej jej wynik na twoje pytanie. –
FYI - błąd oznacza, że kolumna 'D2' nie jest faktycznie obecna w ramce danych' plotdata'. To powiedziawszy, istnieje prawdopodobnie inny (lepszy) sposób osiągnięcia tego, o co prosisz, bez użycia pętli for. –
Ale problem wydaje się być związany z wartością "koloru", którą przechodzę. Jeśli usuniemy kolor z aes_string działka działa. W każdym razie byłoby bardzo pomocne, gdybyś mógł mi powiedzieć, jak to zrobić lepiej i we właściwy sposób. – Dronacharya