webentwicklung-frage-antwort-db.com.de

ggplot2: Dichtediagramme für Überlagerung

Ich möchte ein paar Dichtediagramme in R überlagern und weiß, dass es einige Möglichkeiten gibt, dies zu tun, aber sie funktionieren aus irgendeinem Grund nicht für mich den größten Teil des Codes nicht zu verstehen). Ich habe auch plot und par ausprobiert, aber ich möchte qplot verwenden, da es mehr Konfigurationsoptionen bietet.

Ich habe Daten in diesem Formular gespeichert 

library(ggplot2)
x <- read.csv("clipboard", sep="\t", header=FALSE)
x
     V1     V2    V3
1    34     23    24
2    32     12    32

und ich möchte 3 überlagerte Diagramme mit den Werten von V1, V2 und V3 erstellen, indem Sie oder graue Töne zum Ausfüllen verwenden oder Punktlinien oder ähnliches mit einer Legende verwenden. Kannst du mir helfen?

Vielen Dank!

25
Alex Lungu

im Allgemeinen für ggplot und mehrere Variablen müssen Sie von Wide aus in das lange Format konvertieren. Ich denke, das geht auch ohne, aber so soll das Paket funktionieren

Hier ist die Lösung, ich habe einige Daten generiert (3 Normalverteilungen, zentriert um verschiedene Punkte). Ich habe auch ein paar Histogramme und Boxplots erstellt, falls Sie diese möchten. Die Alpha-Parameter steuern den Transparenzgrad der Füllung. Wenn Sie Farbe anstelle von Füllung verwenden, erhalten Sie nur Umrisse

x <- data.frame(v1=rnorm(100),v2=rnorm(100,1,1),v3=rnorm(100,0,2))
library(ggplot2);library(reshape2)
data<- melt(x)
ggplot(data,aes(x=value, fill=variable)) + geom_density(alpha=0.25)
ggplot(data,aes(x=value, fill=variable)) + geom_histogram(alpha=0.25)
ggplot(data,aes(x=variable, y=value, fill=variable)) + geom_boxplot()

enter image description here

41
user1617979

Der Vollständigkeit halber ist der grundlegendste Weg, Diagramme basierend auf einem Faktor zu überlagern:

ggplot(data, aes(x=value)) + geom_density(aes(group=factor))

Wie in @ user1617979 erwähnt, sind aes(color=factor) und aes(fill=factor) in der Praxis wahrscheinlich nützlicher . three density plots overlaid by factor

6
antoine

Einige Leute haben gefragt, ob Sie dies tun können, wenn die Verteilungen unterschiedlich lang sind. Die Antwort lautet ja, verwenden Sie einfach eine Liste anstelle eines Datenrahmens.

library(ggplot2)
library(reshape2)
x <- list(v1=rnorm(100),v2=rnorm(50,1,1),v3=rnorm(75,0,2))
data<- melt(x)
ggplot(data,aes(x=value, fill=L1)) + geom_density(alpha=0.25)
ggplot(data,aes(x=value, fill=L1)) + geom_histogram(alpha=0.25)
ggplot(data,aes(x=L1, y=value, fill=L1)) + geom_boxplot()
0
Harry Smith