2016-04-28 10 views
0

Ich bin ein relativer Neuling zu R und ich schreibe Code, um ggplot2 zu verwenden, um ein Diagramm aus einigen ziemlich grundlegenden Daten zu erstellen. Mein Plotten Code sieht derzeit wie folgt aus:Brauche zweite Legende in ggplot für geom_hline

chart1_data = read.csv(data_file, as.is=T) 
chart1_means = read.csv(means_file, as.is=T) 

p = ggplot(data=chart1_data, aes(x=entity, y=usage, fill=medicine)) + 
geom_bar(stat="identity", position=position_dodge()) + 
geom_hline(data=chart1_means, aes(yintercept=value), show.legend=FALSE) 

Dies zeichnet ein Diagramm der gruppiert vertikalen Balken mit schwarzen horizontalen Linien über die Balken repräsentieren Mittelwerte und hat eine Legende, welche die Farbcodierung der vertikale Balken.

Ich möchte ein paar Dinge zu tun:

  1. Anzeige die horizontalen Linien (geom_hline) in Farben (den Standardsatz von Farben, die R hat, auf die unterschiedliche Anzahl der Zeilen in der chart1_means abgebildeten Tabelle)

  2. zeigen Sie eine zweite Legende, die diese Linienfarben zeigt und auf den Wert der Spalte 1 in der chart1_means-Datei abbildet, die eine textuelle Bezeichnung ist.

Aus Gründen der Übersichtlichkeit die chart1_means CSV-Datei sieht wie folgt aus:

label,value 
USA Codeine mean, 14.2 
Canada Codeine mean, 12.7 
etc. 

Und die chart1_data CSV-Datei sieht wie folgt aus:

year,medicine,entity,usage,units 
2006,Codeine,Mexico,0.8,mg/capita 
2006,Codeine,Cuba,NA,mg/capita 
etc. 

ich mit diesem erfolglos gegoogelt haben. Es scheint viele Möglichkeiten zu geben, ähnliche Dinge zu tun, aber nichts, was ich finden kann, ist ziemlich zutreffend.

UPDATE UPDATE UPDATE

nahm ich bethanyP Rat etwas bei der Gestaltung, die näher zu korrigieren, aber immer noch nicht stimmt. Code sieht derzeit so aus:

Das Ergebnis sind farbige Linien überlagernden farbigen Balken (gut), aber immer noch nur eine Legende. Die Legende hat den Titel "means" (die zeilenorientierten Daten), zeigt aber die Farben und Bezeichnungen der "medicines" (die bar-orientierten Daten).

Ich dachte, ich könnte in der Lage sein, dies zu tun, statt:

scale_fill_manual("means", values=colors, labels=means_labels) 

aber das füllt die einzige Legende mit dem Titel „Mittel“, Farben mit den Stäben verbunden sind, und Etiketten, die eine Teilmenge der sind " means_labels "(da es weniger Balken als Mittellinien gibt).

Ich bin ziemlich in einer Sackgasse. Brauche noch zwei Legenden aus den zwei verschiedenen Datenreihen. Irgendwelche anderen Vorschläge?

Antwort

1

Fügen Sie die show_guide = TRUE zu der geom_bar Ästhetik hinzu, um explizit zu sagen, dass sie eine Legende für den Inhalt Ihres Diagramms für das primäre Legendenpurpur erstellen soll.

+ geom_bar(stat="identity", position=position_dodge(), show_guide = TRUE) 

Sie können die Farbe in der hline einfach erhalten, indem das Argument hinzufügen, color = "red" in die geom_hline. Wenn Sie gerade dabei sind, fügen Sie ein fill="some text here"-Argument hinzu, um die Zeilen in Ihrer zweiten Legende zu beschriften, besonders wenn Sie mehrere Zeilen mit unterschiedlichen Farben hinzufügen.

+ geom_hline(data=chart1_means, aes(yintercept=value), fill="mean", color="red") 
+ geom_hline(data=chart1_sd, aes(yintercept=value), fill="Standard Deviation", color="pcreateurple") 

Dann können Sie die scale_fill mit dem guide=guide_legend verwenden können Sie den Rest des Weges nach Hause zu kommen.

+ scale_fill_manual("Means & SD", guide=guide_legend(override.aes = list(color=c('purple", "red"))) 

)

Sie auch eine Variable erstellen können die Liste der Farben zu halten und bezeichnen sie durch die den Variablennamen und eine ganze Zahl angeben, welche Farbe in der Liste für jeden zu verwenden, wenn Sie sind Verwenden einer Palette als Container

Wenn Sie Probleme damit haben, dass Farben und Linien nicht da sind, wo Sie es erwarten und die Legende den falschen Stoff enthält, sehen Sie sich die Reihenfolge Ihrer ggplot-Funktionen an.

Wenn Sie die scale_fill_manual vor der geom_hline haben, kann es Farbe und bauen eine Legende für die falsche Ästhetik, wie Ihre Bars. Schneiden und einfügen, bis Sie sie an der richtigen Stelle haben.

ggplot ist erstaunlich leistungsfähig und völlig NICHT intuitiv. Ich behalte immer einen Spickzettel bei mir, um mit diesem Zeug zu helfen. Es ist keine Schande drin. Rstudio hat einen guten.

+0

Ich habe meinen Code in seiner aktuellen Form aktualisiert. – Barry

Verwandte Themen