R ggplot-在不同颜色范围内映射低于和高于阈值的值
在下面的示例中,我希望在蓝色配色方案中为大于100的值着色(从最接近100的浅蓝色到最大值的深蓝色),在暖色范围中为小于100的值着色(从最接近100的黄色到最小值的红色)。请参见下面的颜色范围示例。有人能帮我一下吗?我尝试过几种不同的方法(包括下面的方法),但都没有成功。非常感谢R ggplot-在不同颜色范围内映射低于和高于阈值的值,r,ggplot2,raster,r-raster,legend-properties,R,Ggplot2,Raster,R Raster,Legend Properties,在下面的示例中,我希望在蓝色配色方案中为大于100的值着色(从最接近100的浅蓝色到最大值的深蓝色),在暖色范围中为小于100的值着色(从最接近100的黄色到最小值的红色)。请参见下面的颜色范围示例。有人能帮我一下吗?我尝试过几种不同的方法(包括下面的方法),但都没有成功。非常感谢 #库 图书馆(光栅) 图书馆(GG2) 图书馆(地图工具) 数据(“wrld_siml”) #样品光栅 r一个选项可以是设置颜色的个人ifelse功能 colour_func <- function(x){
#库
图书馆(光栅)
图书馆(GG2)
图书馆(地图工具)
数据(“wrld_siml”)
#样品光栅
r一个选项可以是设置颜色的个人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
colour_func 150,'darkblue',
如果是(x$x>130,'cyan4',
如果其他(x$x>110,'cadetblue3',
如果其他(x$x>100,'cadetblue',
如果其他(x$x>90,'红色',
如果其他(x$x>60,'darkorange3',
如果其他(x$x>40,'darkorange',
ifelse(x$x>20,'goldenrod2',“gold”()()()()()()(41
}
>#绘图
>p p p
嗯。。。那么,你真的希望它在layer=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))))
#绘图
p谢谢你强调这一困惑,我刚刚添加了一个我希望在ggplot2中创建的色阶示例。aaaah明白了!:)一个愚蠢的方法是将数据分割成两个数据帧,然后用两个单独的梯度相互叠加来绘制它们。但希望有比这更优雅的方式!非常感谢,我想再次显示我编辑的颜色的更清晰变化(例如,101值为蓝色,99值为黄色)。如果我仍有误解,请告诉我!:)非常感谢你。这正是我想要的。注:对于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_gradientn(
colours=c("red", "yellow", "skyblue", "darkblue"),
values = rescale(c(min(var_df$layer),
100,
100.01,
max(var_df$layer))))