2016-12-11 4 views
3

Ich möchte Gradient füllen ein Geigen-Plot basierend auf der Dichte der Punkte in den Bins (blau für höchste Dichte und rot für die niedrigsten).Gradient Fill Violinplots mit ggplot2

Ich habe ein Diagramm mit den folgenden Befehlen erstellt, aber es nicht basierend auf Dichte (in diesem Fall die Breite der Violine. Ich möchte auch Box-Plots mit ähnlicher Färbung erzeugen).

library("ggplot2") 
data(diamonds) 

ggplot(diamonds, aes(x=cut,y=carat)) + geom_violin() 
+0

Können Sie ein Bild zeigen (Zeichnung?) Ihrer gewünschten Ausgang? Warum brauchst du die Farben? Bedeutet die Breite der Violine nicht schon Dichte? – Heroka

+0

Hi Heroka, mein eigentliches Ziel ist es, das Violin-Plot (oder das Box-Plot, das ich aus Platzgründen in meinem Fall bevorzuge) basierend auf einem anderen Parameter einzufärben. Ich möchte also zeigen, wie sich die Verteilung des Letters auf eine andere Variable auswirkt; sagen wir Überfluss. Zum Beispiel Wenn Diamanten mit hohem Karat selten sind (nur eine Annahme), dann sollte die Violinen-Plot-Region mit größerer Breite blauer und die schmalen Regionen rötlicher sein. – user2438149

+0

Für den Diamanten Datensatz wird es möglich sein, die cut vs carat Geigen Töpfe mit Preis variabel zu füllen, um die Beziehung zwischen dem Karat und dem Preis zu zeigen. Vielen Dank! – user2438149

Antwort

1

die Farbe der Violine Plot Sie füllen verwenden ändern = Variable, wie folgt aus:

ggplot(diamonds, aes(x=cut,y=carat)) + geom_violin(aes(fill=cut)) 

gleiche gilt für boxplot

ggplot(diamonds, aes(x=cut,y=carat)) + geom_boxplot(aes(fill=cut)) 

enter image description here

aber was auch immer Wert Sie müssen für jeden Schnitt denselben Wert haben, das heißt, wenn Sie beispielsweise mea verwenden möchten n Tiefe/Schnitt als Farbvariable müssten Sie es kodieren.

mit dplyr Gruppe Ihre Diamanten durch Schnitt und mit Fasse die mittlere Tiefe erhalten (oder jede andere Variable)

library(dplyr) 
diamonds_group <- group_by(diamonds, cut) 
diamonds_group <- summarize(diamonds_group, Mean_Price = mean(price)) 

Dann habe ich als Kopie von Diamanten diamonds2, um dann den Datensatz zu manipulieren

diamonds2 <- diamonds 

ich fusionieren beide Datenrahmen die Mean_Depth als Variable in diamonds2

diamonds2 <- merge(diamonds2, diamonds_group) 
zu erhaltenUnd jetzt kann ich es mit einer mittleren Tiefe als Farb variable plotten

ggplot(diamonds2, aes(x=cut,y=carat)) + geom_boxplot(aes(fill=Mean_Price)) + scale_fill_gradient2(midpoint = mean(diamonds2$price)) 

enter image description here

+0

Hallo Derek, vielen Dank! Ich habe mich gefragt, ob es möglich sein wird, jede Box einzeln auf der Grundlage des Preises zu füllen (blau für hoch; rot für niedrigen Preis, wobei der Mittelwert weiß gefärbt ist). – user2438149

+0

@ user2438149 meinst du eine Farbe pro Box richtig? –

+0

@ user2438149 Ich habe die Antwort bearbeitet, hoffentlich ist das, was Sie gesucht haben –