ggplot - отображение значений ниже и выше порога в разных цветовых диапазонах
В приведенном ниже примере я хотел бы закрасить значения выше 100 в синей цветовой схеме (от светло-синего для ближайшего к 100 до темно-синего для максимума) и значения ниже 100 в теплом цветовом диапазоне (от желтого для ближайшего до 100 до мин). Смотрите пример цветовой гаммы ниже. Может ли кто-нибудь любезно помочь мне в этом? Я пробовал несколько разных способов (включая тот, что ниже), но безуспешно. Большое спасибо!
#library
library(raster)
library(ggplot2)
library(maptools)
data("wrld_simpl")
#sample raster
r <- raster(ncol=36, nrow=18)
r[] <- (-ncell(r)/2+1):(ncell(r)/2)
plot(r)
var_df <- as.data.frame(rasterToPoints(r))
#plotting
p <- ggplot()
p <- p + geom_raster(data = var_df , aes(x = x, y = y, fill = layer))
p <- p + coord_equal()
p <- p + scale_fill_gradient2(low = muted("red"), mid = "white",
high = muted("blue"), midpoint = 100)
p
2 ответа
Решение
Хммм... итак, вы на самом деле хотите, чтобы он разделился ровно на слое =100?
Если так,
#plotting
p <- ggplot()
p <- p + geom_raster(data = var_df , aes(x = x, y = y, fill = layer))
p <- p + coord_equal()
p <- p + scale_fill_gradientn(
colours=c("red", "yellow", "skyblue", "darkblue"),
values = rescale(c(min(var_df$layer),
100,
100.01,
max(var_df$layer))))
Один вариант может быть личным ifelse
функция для установки цветов
colour_func <- function(x){
ifelse(x$x > 150, 'darkblue',
ifelse(x$x > 130, 'cyan4',
ifelse(x$x > 110, 'cadetblue3',
ifelse(x$x > 100, 'cadetblue',
ifelse(x$x > 90, 'red',
ifelse(x$x > 60, 'darkorange3',
ifelse(x$x > 40, 'darkorange',
ifelse(x$x > 20, 'goldenrod2', "gold"))))))))
}
> #plotting
> p <- ggplot()
> p <- p + geom_raster(data = var_df , aes(x = x, y = y, fill = layer))
> p <- p + coord_equal()
> p <- p + scale_fill_gradientn(colours = colour_func(var_df))
> p
ht tps://stackru.com/images/27c80d7e5944e569aae8ff3a65de8db16e262ab7.png