muszę stworzyć prosty liniowy wykres z grup, stosując następujące dane:Jak utworzyć wykres liniowy z grupami w Base R bez pętli?
test = data.frame(x = rep(1:3, each = 2),
group = rep(c("Group 1","Group 2"),3),
groupcd= rep(c(1,2),3),
y= c(22,8,11,4,7,5)
)
można łatwo zrobić z ggplot:
library(ggplot2)
#GGPLOT
qplot(x=x, y=y,
data=test,
colour=group,
main="GGPLOT line plot with groups") +
geom_line()
Mogę też zrobić to z TRELLIS:
library(lattice)
xyplot(y~x,
type="b",
group=group,
data=test,
main="TRELLIS line plot with groups",
auto.key =list(
lines = TRUE)
)
Jednak jestem trochę niechętny do korzystania z GGPLOT lub TRELLIS już teraz. Chciałbym być w stanie stworzyć ten wykres z podstawą R. jedyny sposób mogę dostać tę działkę do pracy w bazie R jest za pomocą pętli for:
# set up empty plot
plot(test$y ~test$x, ylab="y", xlab="x", type="n", main="Base R line plot with groups")
colors<-c("red","blue")
#plot each group in the for loop
number_of_groups <- as.numeric(max(unique(test$groupcd))) #calculate number of groups
for (i in 1:number_of_groups)
{
temp <- subset(test, groupcd==i)
lines(temp$x, temp$y, col=colors[i])
points(temp$x, temp$y, col=colors[i])
}
legend("top", legend=unique(test$group), text.col =colors )
Takie podejście wydaje się dość zwinięty. Czy jest łatwiejszy sposób na zrobienie tego w bazie R? Czy istnieje opcja grupowa w podstawowej funkcji fabuły? Dziękuję bardzo.
przekształć dane w formacie szerokokątnym i użyj 'matplot' ... –
Dziękuję bardzo! Nie wiedziałem nawet o matplot - jest to niezwykle pomocne. Jest to bardzo dobre rozwiązanie i wydaje się najlepszym rozwiązaniem. Jestem po prostu zaskoczony, że grupowanie nie może być łatwe z PLOT. Jeszcze raz dziękuję –
Myślę, że powinieneś przesłać swoje rozwiązanie 'matplot' jako odpowiedź, a nie jako odpowiedź na twoje pytanie (chociaż w zależności od twojej reputacji możesz potrzebować trochę poczekać - nie wiem). Myślę, że mogę śmiało powiedzieć, że nie ma * prostej * opcji grupowej w 'bazie :: spisek '.Kilka innych myśli na temat twojego kodu powyżej: (1) Myślę, że możesz użyć 'subset (test_transposed, select = -x)', aby upuścić kolumnę 'x'; (2) prawdopodobnie chcesz "lty = 1: 2, col = kolory, pch = 1: 2" w twoim "legendzie". –