如何更改/指定超出渐变条限制的填充颜色?
Posted
技术标签:
【中文标题】如何更改/指定超出渐变条限制的填充颜色?【英文标题】:how to change / specify fill color which exceeds the limits of a gradient bar? 【发布时间】:2021-12-31 17:29:30 【问题描述】:在ggplot2/geom_tile中,如何更改超出限制的填充颜色?
如图, Region_4/5 不在limis(1,11)
,所以填充颜色默认为灰色,如何将'Region_4'更改为'darkblue','Region_5'更改为'black'。谢谢!
library(tidyverse)
library(RColorBrewer)
tile_data <- data.frame(category=letters[1:5],
region=paste0('region_',1:5),
sales=c(1,2,5,0.1,300))
tile_data %>% ggplot(aes(x=category,
y=region,
fill=sales))+
geom_tile()+
scale_fill_gradientn(limits=c(1,11),
colors=brewer.pal(12,'Spectral'))+
theme_minimal()
【问题讨论】:
感谢您的重播。 “所以——你想要两种不同的颜色来表示值“超出限制”(限制什么)“——对,这就是我想要的。分界线有“limits=c(1,11)limits=c(0,0.9)limits=c(100,400)” 【参考方案1】:如果您想保持渐变比例并为上下限设置两个额外的离散值,我认为最简单的方法是为“限内”和“限外”值设置单独的填充比例。这可以通过在数据子集上单独调用 geom_tile 以及使用 ggnewscale 等包来完成。
我认为将离散的“禁区”放置在渐变颜色条的各个极端是有意义的。然后您需要三个geom_tile
调用和三个scale_fill
调用,并且您需要在每个scale_fill
调用中指定引导顺序。然后,您将需要调整图例边距,但让它看起来不错并不是什么大问题。
library(tidyverse)
library(RColorBrewer)
tile_data <- data.frame(
category = letters[1:5],
region = paste0("region_", 1:5),
sales = c(1, 2, 5, 0.1, 300)
)
ggplot(tile_data, aes(
x = category,
y = region,
fill = sales
)) +
geom_tile(data = filter(tile_data, sales <= 11 & sales >=1)) +
scale_fill_gradientn(NULL,
limits = c(1, 11),
colors = brewer.pal(11, "Spectral"),
guide = guide_colorbar(order = 2)
) +
ggnewscale::new_scale_fill() +
geom_tile(data = filter(tile_data, sales > 11), mapping = aes(fill = sales > 11)) +
scale_fill_manual("Sales", values = "black", labels = "> 11", guide = guide_legend(order = 1)) +
ggnewscale::new_scale_fill() +
geom_tile(data = filter(tile_data, sales < 1), mapping = aes(fill = sales < 1)) +
scale_fill_manual(NULL, values = "darkblue", labels = "< 1", guide = guide_legend(order = 3)) +
theme_minimal() +
theme(legend.spacing.y = unit(-6, "pt"),
legend.title = element_text(margin = margin(b = 10)))
由reprex package (v2.0.1) 于 2021 年 11 月 22 日创建
【讨论】:
'ggnewscale' 正是我想要的,太好了,谢谢!【参考方案2】:您可以尝试scales::squish,定义限制,并将超出范围 (oob) 的值放入 scalw:
p = tile_data %>% ggplot(aes(x=category,y=region,fill=sales))+ geom_tile()
p + scale_fill_gradientn(colors = brewer.pal(11,"Spectral"),
limit = c(1,11),oob=scales::squish)
【讨论】:
感谢您的重播,这对我来说是一个有用的新知识。有没有办法定义填充颜色? 定义填充颜色是什么意思?您已经使用colors = brewer.pal(11,"Spectral")
完成了它,您可以更具体一点,
我想定义填充颜色 'Region_4' > 'darkblue', 'Region_5' > 'black' 。谢谢!
嘿,这行不通。您正在使用连续配色方案。区域 4 的值为 0.1,因此它应该更红,是的,您可以通过 colors = c(brewer.pal(11,"Spectral"),"#000000")
将区域 5 设为黑色
感谢您的重播。我会尝试使用 'colors = c(brewer.pal(11,"Spectral"),"#000000")' ,这对我来说是新知识。以上是关于如何更改/指定超出渐变条限制的填充颜色?的主要内容,如果未能解决你的问题,请参考以下文章