La scala di colori geom_contour_filled non corrisponde alle interruzioni

Aug 21 2020

Vorrei tracciare riempimenti di contorno con colore in base a un intervallo di interruzioni che è maggiore dell'intervallo dei dati, in modo che grafici diversi abbiano la stessa scala. Nell'esempio seguente, ci si aspetta che il blu e il rosso corrispondano rispettivamente a valori più negativi o positivi. Tuttavia, quando il grafico non contiene l'intera gamma, geom_contour_filledriconosce le interruzioni ma non corrisponde alla scala dei colori. Quindi, i valori positivi sono tutti blu.

library(ggplot2)

grid <- expand.grid(x=0:10,y=0:10)
grid$z <- with(grid, x*y) # 0 to 100 does not work as expected # grid$z <- with(grid, 2*x*y-100) # -100 to 100 works as expected

ggplot(grid,aes(x=x,y=y,z=z)) +
  scale_colour_manual( aesthetics = 'fill',
                       values = colorRampPalette(c('blue','white','red'))(20) ) +
  geom_contour_filled( breaks=floor(seq(-100,100, length.out=20)) )

Risposte

3 AllanCameron Aug 21 2020 at 21:26

Devi aggiungere drop = FALSEalla tua scala di colori:

ggplot(grid,aes(x=x,y=y,z=z)) +
  scale_colour_manual( aesthetics = 'fill', drop = FALSE,
                       values = colorRampPalette(c('blue','white','red'))(20) ) +
  geom_contour_filled( breaks=floor(seq(-100,100, length.out=20)) )