Ho bisogno per creare un semplice diagramma linea con gruppi utilizzando i seguenti dati:Come creare un grafico a linee con gruppi in Base R senza loop?
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)
)
posso facilmente farlo con GGPLOT:
library(ggplot2)
#GGPLOT
qplot(x=x, y=y,
data=test,
colour=group,
main="GGPLOT line plot with groups") +
geom_line()
posso anche farlo con TRELLIS:
library(lattice)
xyplot(y~x,
type="b",
group=group,
data=test,
main="TRELLIS line plot with groups",
auto.key =list(
lines = TRUE)
)
Tuttavia, sono un po 'riluttante a utilizzare GGPLOT o TRELLIS adesso. Mi piacerebbe essere in grado di creare questo grafico con base R. L'unico modo che posso ottenere questa trama di lavorare in base R è quello di utilizzare per il ciclo:
# 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 )
Questo approccio sembra abbastanza contorto. C'è un modo più semplice per farlo nella base R? Esiste un'opzione di gruppo nella funzione di trama R di base? Grazie mille.
trasforma i tuoi dati in grande formato e usa 'matplot' ... –
Grazie mille! Non ero nemmeno a conoscenza di matplot - questo è estremamente utile. È un'ottima soluzione e sembra essere l'opzione migliore finora. Sono semplicemente un gruppo molto sorpreso che non può essere fatto facilmente con PLOT. Grazie ancora –
Penso che dovresti inviare la tua soluzione 'matplot' come risposta piuttosto che come una modifica alla tua domanda (anche se a seconda della tua reputazione potresti dover aspettare un po '- non lo so). Penso di poter dire con sicurezza che non esiste * non * una semplice opzione di gruppo in 'base :: plot'.Un paio di altri pensieri sul tuo codice qui sopra: (1) Penso che tu possa usare 'sottoinsieme (test_transposed, select = -x)' per eliminare la colonna 'x'; (2) probabilmente vuoi 'lty = 1: 2, col = colors, pch = 1: 2' nella tua istruzione' legend'. –