2016-07-25 18 views
2

Ich muss eine Variable und eine Teilmenge dieser Variablen in einem Diagramm darstellen und habe Schwierigkeiten mit der Platzierung der Legende. Sehen Sie im folgenden MWE:Legende hinzufügen, wenn eine Teilmenge verwendet wird

library(ggplot2) 

ggplot(data = cars, aes(x = speed)) + 
    geom_line(stat = "density", colour = "red", size = 1) + 
    geom_area(stat = "density", fill = "red", alpha = 0.3) + 
    geom_line(data = subset(cars, dist > 50), stat = "density", colour = "blue", size = 1) + 
    geom_area(data = subset(cars, dist > 50), stat = "density", fill = "blue", alpha = 0.3) 

enter image description here

Bitte beachten Sie, dass es nicht möglich ist fill = dist > 50 in der Ästhetik für diese incluce würde die Daten in zwei Teile geteilt. Aber die ersten geom_line und geom_area müssen nicht nur diese Werte mit dist <= 0, sondern alle Werte aus den Daten enthalten.

Daher spezifiziere ich die Farben manuell in geom 's. Aber wie kann ich jetzt eine Legende hinzufügen? Ich würde es vorziehen, nur die zwei geom_line 's einzuschließen.

Ich versuchte mit scale_color_manual, aber brachte es nicht zur Arbeit (wenn das der Weg ist zu gehen, überhaupt?).

Irgendwelche Vorschläge?

EDIT: Ich habe den Code geändert, um ein funktionierendes minimales Beispiel zu zeigen.

+2

http://stackoverflow.com/questions/5963269/how-to-make-a-great -r-repearable-example – shayaa

Antwort

2

Es ist besser, die Daten außerhalb ggplot vorzubereiten, siehe Beispiel:

# data prep 
plotDat <- rbind(
    data.frame(Group = "Full Data", cars), 
    data.frame(Group = "Subset Data", cars[cars$speed < 15, ])) 

library(ggplot2) 
ggplot(plotDat, aes(x = speed, col = Group, fill = Group)) + 
    geom_density(alpha = 0.3) 

enter image description here

+1

Ich habe gerade festgestellt, dass dies keine Antwort auf meine Frage ist, da die Handlung aus Ihrem Vorschlag die Dichteplots aufstapelt. Es ist also ein völlig anderer Graph. Ich habe 'position =" dodge "' zu 'geom_area' hinzugefügt, um den Graphen zu erhalten, nach dem ich gesucht habe. Danke für deine Idee. –

+0

@der_grund richtig, verwendete die falsche Plot-Funktion, siehe Bearbeiten. – zx8754

+0

Das ist sogar besser im Vergleich zu meinem (redigierten) Kommentar. –