ggplot红白渐变出现橘色。

问题描述 投票:0回答:1

我在ggplot中创建了一个热图,我使用的是默认的红图转白图。scale_fill_gradient. 然而,当我绘制梯度时,它似乎有一个橙色的色调。我想知道是否有方法可以编辑出 ggplot 计算梯度,使我得到粉红色的中间值,这样就能和我做的其他数字相匹配。与这个图形相关的,虽然我可以单独发帖,但我想让我的NA值有一个条纹图案(而不是灰色填充)。我还没有找到一种方法可以在 ggplot.

    p <- ggplot(heat.data, aes(x = MutResFac, y = mutAA, fill = disruption)) +
            geom_tile(color="grey50") +
            scale_fill_gradient(name = "Disruption", limits = c(0,3),
                                 labels = c("WT-like", "Mild", "Moderate", "Severe"),
                                 low = "#FFFFFF", high = "#FF0000",
                                 guide = "legend") +
            theme(axis.text.x = element_text(size = 25, hjust = 1), 
                  text = element_text(size = 25), 
                  plot.title = element_text(hjust = 0.5)) + 
            coord_fixed() +
            labs(x = "Position", y = "Mutant Amino Acid") +
            ggtitle(title) + 
            scale_x_discrete(labels = wildTypeSeqLabels) 

A example plot of the data

r ggplot2 colors gradient heatmap
1个回答
0
投票

简单的答案是,为什么你的颜色从红色到白色的中间范围出来的橙色是,他中间的颜色值,从红色到白色。#FF0000 而白色是橙色。 较好的实用色彩理论答案是 #FF0000 是偏黄或偏橙的红色,而不是偏蓝的红色,所以中间的颜色会偏橙。 最专业的答案是 渐变色标尺函数的技术文档中解释过。. 该 scale_..._gradient 函数在保持色调不变、改变色度和亮度的基础上创建梯度。

固定比例的选项

为此,我将使用一个示例数据集,并在这里用基本代码绘制。

set.seed(1111)
df <- data.frame(x=1:10, y=rnorm(10,1,0.2), values=1:10)
p <- ggplot(df, aes(x,y, fill=values)) + geom_col(width=0.7)

你可以考虑以下几种情况:

  1. 选择一个更蓝的红色开始。

    p + scale_fill_gradient(low='#FFFFFF', high='#FE43AF')

enter image description here

  1. 更加谨慎地选择您的刻度,使用 scale_fill_gradientn:

    pal <- c('#F8F6F6', '#F4AABC', '#E83D7D')p + scale_fill_gradientn(颜色 = pal)

enter image description here

顺便说一下,该功能 choose_color() 来自 colorspace 包是一个非常有用的小工具(需要 shinyshinyjs 要安装,因为它是一个闪亮的应用程序),可以帮助选择颜色。 本指南 也可能会派上用场。 scale_fill_gradientn 和使用的。choose_color() 设置你的调色板可以让你完全控制,但它有一个倾向,使过渡有点奇怪:这就是为什么我喜欢上面显示的第一个渐变与第二个。

图案填充

目前,还没有好的、简单的方法来制作图案化的填充物。ggplot 据我所知。 可以提出一个问题,但 最好的似乎是SO的这个答案. 虽然不是太令人满意,但目前看来,这是最好的办法。

© www.soinside.com 2019 - 2024. All rights reserved.