我想用自定义填充色标制作一个条形图。假设下面的数据z_score
既有正值也有负值:
data_1 <- data.frame(
name = paste('Pathway', 1:5),
p_val = c(0.01, 0.05, 0.03, 0.001, 0.02),
z_score = c(-2, -3, 3, 4, 2.5)
)
data_1 |>
ggplot(aes(x = p_val, y = fct_reorder(name, p_val))) +
geom_bar(aes(fill = z_score), stat = 'identity') +
scale_fill_gradientn(
colours = colorRampPalette(c('#709AE1', '#FFFFFF', '#FD7446'))(100)
)
上面的代码按预期工作。现在,假设一个数据只有负z_score
:
data_2 <- data.frame(
name = paste('Pathway', 1:5),
p_val = c(0.01, 0.05, 0.03, 0.001, 0.02),
z_score = c(-2, -3, -3, -4, -2.5)
)
data_2 |>
ggplot(aes(x = p_val, y = fct_reorder(name, p_val))) +
geom_bar(aes(fill = z_score), stat = 'identity') +
scale_fill_gradientn(
colours = colorRampPalette(c('#709AE1', '#FFFFFF', '#FD7446'))(100)
)
这会产生不正确的绘图,因为我希望颜色从白色Map到蓝色(所有z_score
值都是负值):
我尝试改变填充颜色,以便在所有z_score
值都为负的情况下,只有白色和蓝色,但这会给出一个不正确的图:
对于仅为负的z_score
,我希望白色只用于接近零的值。不知何故,比例应该是固定的。例如,z_score
为-2不应该Map到白色,但仍然应该是蓝色,即使它是最小的值。这有意义吗?
感谢任何提示!
2条答案
按热度按时间wj8zmpe11#
看看
scale_fill_gradient2
函数是否达到了你的目标。你可以为low
,high
和mid
值设置颜色。默认情况下,中点设置为零,颜色为白色。使用此功能,无论值为负或正值,都可以使用相同的填充比例。
p3rjfoxz2#
我们可以修改
scale_fill_gradientn
函数的breaks
和limits
参数: