Ich versuche eine manuelle Skalierung für die Farben in einem meiner Plots zu erstellen. Meine Daten reichen von 0 bis 10, und ich habe einige sehr kleine Zahlen. Wichtig, ich möchte zwei Farbverläufe. Eine für Punkte mit Werten < 1, und eine für Punkte mit Werten> = 1. Da ich ziemlich viele sehr kleine Zahlen habe, möchte ich, dass der Farbverlauf auf einer logarithmischen Skala liegt (divergierend bei 1).Manuelle Werte für die Skalierung angeben _ * _ gradienten mit transformierter Farbe/Füllvariable ggplot2
Simulierte Daten:
library(cowplot)
df <- data_frame(xs = rnorm(1000),
ys = rnorm(1000),
color_vals =c(runif(500, 0,.001), runif(500, .01,10)))
Ich weiß, dass ich dies wie so automatisch tun kann (ich weiß es nicht sinnvoll, einen weißen Punkt zu haben, aber das ist nur ein Spielzeug Beispiel für meine komplexere Karte Plot):
ggplot(df, aes(x=xs, y=ys, color=color_vals)) + geom_point() +
scale_color_gradient2(low="blue", high = "red", mid = "white", trans="log10")
ich aber nicht diese Art von Gradienten wollen, denn ich will zwei zunehmende Steigungen, Split im Verhältnis 1: (1) von grau bis blau und (2) von gelb nach rot.
Ich weiß, dass ich dies mit scale_color_gradientn
auf diese Weise angeben:
ggplot(df, aes(x=xs, y=ys, color=color_vals)) + geom_point() +
scale_color_gradientn(colors = c("grey", "blue", "yellow", "red"),
values = scales::rescale(c(0,1,1.000001, max(df$colors))))
aber wenn ich versuche, dies mit der Log-in Tandem zu tun verwandeln, wird die Steigung nicht korrekt herausstellen.
ggplot(df, aes(x=xs, y=ys, color=color_vals)) + geom_point() +
scale_color_gradientn(trans = "log10",
colors = c("grey", "blue", "yellow", "red"),
values = scales::rescale(c(0.000001,1,1.000001, max(df$colors))))
Die nächstgelegene ich bekommen habe ist, die Zahlen innerhalb rescale
zur Anmeldung zu verwandeln, um zu versuchen, aber das nicht richtig funktioniert (obwohl es in der Nähe ist).
ggplot(df, aes(x=xs, y=ys, color=color_vals)) + geom_point() +
scale_color_gradientn(trans = "log10",
colors = c("grey", "blue", "yellow", "red"),
values = scales::rescale(log10(c(0.000001,1,1.000001, max(df$colors)))))
So wie kann ich die richtigen Werte für meine zwei Steigungen angeben, wenn ich auch die Steigungen wollen umgewandelt werden log?
Was funktioniert bei dem letzten Versuch nicht richtig? Ist es der Farbbalken selbst oder die gezeigten Farben (oder beides)? – aosmith
Es sind die Farben selbst. Sie können sehen, dass einige Werte über 1 immer noch blau gefärbt sind. Idealerweise würde die blaue Farbe bei 1 aufhören und alles über 1 wäre auf dem gelben bis roten Gradienten. Die erste Handlung macht das, aber wenn ich es auf der logarithmischen Skala mache, funktioniert es nicht mehr. – sjfox
Wie sieht es aus, wenn Sie den kleinsten Wert im Dataset verwenden, 'min (df $ colors)' als Ausgangspunkt für die log10-Skalierung anstelle von .000001? – aosmith