2016-12-06 2 views
0

Beim Versuch, mein gestapeltes Histogramm nach einer Faktorspalte zu färben; Alle Bars haben ein "grünes" Dach? Ich möchte, dass das Bar-Top die gleiche Farbe hat wie die Bar selbst. Die folgende Abbildung zeigt deutlich, was falsch ist. Alle Balken haben eine "grüne" horizontale Linie an der Spitze?ggplot geom_histogram Farbe nach Faktor funktioniert nicht richtig

enter image description here

Dies ist ein Dummy-Datensatz:

BodyLength <- rnorm(100, mean = 50, sd = 3) 

vector <- c("80","10","5","5") 

colors <- c("black","blue","red","green") 

color <- rep(colors,vector) 

data <- data.frame(BodyLength,color) 

Und das Programm, das ich den Plot unten zu generieren verwendet:

plot <- ggplot(data = data, aes(x=data$BodyLength, color = factor(data$color), fill=I("transparent"))) 

plot <- plot + geom_histogram() 

plot <- plot + scale_colour_manual(values = c("Black","blue","red","green")) 

Da auch die Datenspalte selbst Farbe enthält Namen, egal wie ich sie in scale_color_manual nicht nochmal angeben muss? Kann ggplot sie aus den Daten selbst identifizieren? Aber ich würde wirklich gerne Hilfe beim ersten Problem haben ... Danke.

Antwort

0

Hier ist ein kurzer Weg, um Ihre Farben zu scale_colour_manual zu erhalten, ohne einen Vektor auszuschreiben: später

data <- data.frame(BodyLength,color) 
data$color<- factor(data$color) 

und dann

,

scale_colour_manual(values = levels(data$color)) 

nun mit Bezug auf Ihr erstes Problem, ich don Ich weiß nicht genau, warum deine Bars grüne Dächer haben. Sie können jedoch auf einige verschiedene Optionen für die Position Argument in geom_histogram, wie

plot + geom_histogram(position="identity") 

..oder position="dodge" suchen. Die identity Option ist näher an dem, was Sie wollen, aber da Grün die letzte gezeichnete Linie ist, überschreibt es vorher die Farben.

Ich mag Dichten Plots besser für diese Probleme selbst.

ggplot(data=data, aes(x=BodyLength, color=color)) + geom_density() 
ggplot(data=data, aes(x=BodyLength, fill=color)) + geom_density(alpha=.3) 
+0

Plot + geom_histogram (Position = "Identität") scheint zu arbeiten; außer dass jetzt alle farbigen Stapel an der Basis ihrer jeweiligen Behälter sind, d. h. unter den schwarzen Balken. Ich will sie an der Spitze. Danke, David zu versuchen ... Ich werde updaten, wenn ich das Problem herausfinden werde. – Mansi

+0

Für jedes Histogramm, das Sie zeichnen, wo Sie Fächer mit andersfarbigen Umrissen und transparenten Behältern überlagert haben, muss die Grafikprozedur eine Entscheidung darüber treffen, wie das Overlay durchgeführt wird. Wenn Sie beispielsweise in einer Bin für die blaue Gruppe eine "0" haben, zeichnet R eine horizontale Linie für das Blau bei Y = 0. Wenn in der blauen Bin "1" ist, wird ein Rechteck mit der Höhe Y gezeichnet = 1, und dies bleibt so lange bestehen, bis es von der nächsten Gruppe überschrieben wird. – David

+0

In meiner Version davon gibt es viele schwarze Balken, da Schwarz am zahlreichsten ist. Schwarz ist jedoch die untere Histogrammschicht in der Überlagerung und Grün ist die oberste Schicht; Dies liegt an der Funktion 'factor()'. Deshalb ist die Zeile Y = 0 in meiner Version grün. Die farbigen Stapel befinden sich an der Basis ihrer jeweiligen Fächer, denn wenn für ein beliebiges Fach, wenn schwarz = 5 und rot = 2, dann wird es zwei horizontale Linien geben. Ich habe Probleme, zu visualisieren, wie Ihr optimales transparentes Histogramm aussehen würde. – David

Verwandte Themen