2017-05-14 1 views
2

Ich plotten Heatmaps mit der Funktion aus dem lattice Paket. Die Werte in meiner Matrix Bereich von -1 bis 1 und ich verwenden, um die folgende Skala:Colourscale: ändern wo Übergang beginnt

cols <- colorRampPalette(c("blue", "white", "red"))(256) 

Ein kleines Beispiel:

d <- 20 
df <- expand.grid(x = 1:d, y = 1:d) 
df$z <- runif(d*d, -1, 1) 

levelplot(z ~ x * y, data = df, 
      col.regions = cols) 

enter image description here

Ich wünsche die Skala einzustellen, so dass ein Größerer Anteil der Skala ist weiß. Ich nehme an, dass ich manuell definieren muss, wo der Übergang beginnt oder besser, aber verschiedene "Übergangsgeschwindigkeiten" definiere - einen langsameren, wenn ich näher bei 0 bin (d. H. Weiß) und einen schnelleren, wenn ich näher bei 1 oder -1 bin.

Alle Ratschläge, wie dies zu tun wäre, würden sehr geschätzt werden!

+0

ich Sie 'lattice' zu ​​verwenden sind nicht beschränkt gehen könnte, ist hier, wie können Sie tue es in 'ggplot': [Ist es möglich, den" mittleren "Bereich in scale_fill_gradient2() zu definieren?] (http://stackoverflow.com/questions/21758175/is-it-possible-to-define) -der-mittlere-in-scale-fill-gradient2/21758729 # 21758729) – Henrik

+0

Danke für den Link! Wenn möglich, würde ich mich gerne an das Gitter halten, weil ich eine vorher existierende Matrix plotten möchte, anstatt eine Korrelationsmatrix zu berechnen, und ich habe herausgefunden, dass dies im Gitter einfacher ist ... – oak

+0

OK! Aber ich kann Ihnen versichern, dass der Übergang von 'gitter' zu' ggplot' nicht so schwierig ist. Viel Glück trotzdem! – Henrik

Antwort

0

Sie können die Interpolation für einen glatteren Übergang auf spline umschalten.

cols <- colorRampPalette(c("blue", "white", "red"), interpolate = "spline")(256) 

enter image description here

Sie auch mit den viel schöner Paletten von RColorBrewer

cols2 <- colorRampPalette(RColorBrewer::brewer.pal(11, "RdBu"))(256) 
levelplot(z ~ x * y, data = df, col.regions = rev(cols2)) 

enter image description here

Verwandte Themen