Frage Wie überlagert man Streudiagramme in R?


Wenn ich drei Datensätze habe:

a1= rnorm(10)
a2= rnorm(10)
a3= rnorm(10)

anstatt diese Seite an Seite zu betrachten mit:

par(mfrow=c(1,3))
plot(a1)
plot(a2)
plot(a3)

Wie bekomme ich alle diese Punkte auf dem gleichen Grundstück?


12
2017-10-01 16:07


Ursprung


Antworten:


Benutze einfach die points Funktion:

plot(a1)
points(a2, col=2)
points(a3, col=3)

Dies ist äquivalent zu:

plot(1:length(a1), a1)
points(1:length(a2), a2, col=2)
points(1:length(a3), a3, col=3)

Wenn die Vektoren ungleiche Längen haben, sollten Sie die Begrenzung der X-Achse angeben:

plot(a1, xlim=c(1, max(length(a1), length(a2), length(a3))))

24
2017-10-01 16:20



# To overlay scatterplots in R

# import the required libraries
library(ggplot2)
library(reshape2)

# assign data
a1=rnorm(10)
a2=rnorm(10)
a3=rnorm(10)

# create a dataframe from combined data
# and set count to however many points are in each dataset
df = data.frame(a1, a2, a3, count = c(1:10))

# melt the dataframe
df.m = melt(df, id.vars ="count", measure.vars = c("a1","a2","a3"))

# take a look at what melt() does to get an idea of what is going on
df.m

# plot out the melted dataframe using ggplot
ggplot(df.m, aes(count, value, colour = variable)) + geom_point() + ylim(-3,3)

# swapping the axis
ggplot(df.m, aes(value, count, colour = variable)) + geom_point() + xlim(-3,3)

Wann a1 und a3 sind in der Größe gleich, es ist nicht möglich, in dasselbe einzustufen data.frame als Spalten, als Eingabe für melt. Die Lösung ist einfach zu verwenden list:

a1 = rnorm(10)
a2 = rnorm(25)
a3 = rnorm(17)
a_list = list(a1, a2, a3)
a_df = do.call("rbind", lapply(a_list, 
                                function(x) data.frame(value = x, 
                                                       count = seq_along(x))))
ID_options = LETTERS[seq_along(a_list)]
a_df$ID = rep(ID_options, sapply(a_list, length))
ggplot(a_df, aes(x = value, y = count, color = ID)) + geom_point()

enter image description here


8
2017-10-01 16:07



Um die Antworten abwechslungsreicher zu gestalten, können Sie auch verwenden lattice. Hier repräsentiert die zweite Zeile in jedem Satz von Codebeispielen vertauschte Achsen.

library(lattice)

## If you have already created the "df" 
##   data.frame from your example
xyplot(count ~ a1 + a2 + a3, data=df)
xyplot(a1 + a2 + a3 ~ count, data=df)

## Without first creating the "df" 
##   data.frame from your example    
xyplot(1:10 ~ a1 + a2 + a3)
xyplot(a1 + a2 + a3 ~ 1:10)

Wenn Sie mit Vektoren ungleicher Länge arbeiten, können Sie die Funktionen aus laden Diese Antwort habe ich geteilt cbindVektoren ungleicher Länge und dann benutze den ersten Ansatz, den ich erwähnt habe. Aktualisieren: Sehen https://gist.github.com/mrdwab/6789277 für die neuesten Versionen der Funktion.

Beispiel:

a1 = rnorm(10)
a2 = rnorm(25)
a3 = rnorm(17)

library(lattice)
library(devtools)
## source_gist is not working properly unless you provide 
##   the full URL to the "raw" file
source_gist("https://gist.github.com/mrdwab/6789277/raw/9bd7d5931389ec475c49c1918d26d9899796a5d0/Cbind.R")

newdf <- Cbind(a1, a2, a3)
xyplot(a1 + a2 + a3 ~ sequence(nrow(newdf)), data=newdf)
xyplot(sequence(nrow(newdf)) ~ a1 + a2 + a3, data=newdf)

Hier ist ein Beispieldiagramm mit ein paar Anpassungen der Standardfarben:

xyplot(sequence(nrow(newdf)) ~ a1 + a2 + a3, data=newdf, 
       pch = 21, fill = c("black", "red", "green"), cex = 1)

enter image description here


3
2017-10-01 16:26