【问题标题】:R Github heatmap colors modificationR Github 热图颜色修改
【发布时间】:2019-07-29 12:44:42
【问题描述】:

我正在使用这个热图来制作几个不同的日历。

https://github.com/cran/makeR/blob/master/R/calendarHeat.R

我的问题是,我是否可以在此代码中为特定颜色分配某个值。例如,当我的值介于 0 和 30 之间时,我希望通过将红色分配给 0 来非常清楚地突出它。从 0.1 到 30 的所有其他值应该是从白色到蓝色:

> 0 = #0571B0
> 0.1 - 30 = w2b <- c("#045A8D", "#2B8CBE", "#74A9CF", "#BDC9E1", "#F1EEF6")   #white to blue

或者另一个例子。我的值从 -20 到 35,我想要从蓝色到红色的颜色,0 是白色。这个github代码有可能吗?我发现了几个像这样的相关主题:R Heatmap with controlled colors and thresholds?,但它与这个特定的 github 代码无关。

【问题讨论】:

    标签: r colors heatmap


    【解决方案1】:

    使用此代码很难为某些值指定颜色,因为它使用levelplot 函数进行实际绘图。

    您也许可以尝试破解一下,例如使用您想要的阴影值制作一个字符串字符向量,并将蓝色放在向量的开头,这只需要您制作一个类似的向量r2r&lt;- c("#ff0033","#a10020") 这是将从 - 移至的两种红色阴影。然后在levelplot 参数部分更改

    col.regions = calendar.pal(ncolors)

    col.regions = c('#0367FC', calendar.pal(ncolors-1)),

    在这种变化之下

    colorkey = list(calendar.pal(ncolors), width = 0.6, height = 0.5)

    colorkey= list(col =c('#0367FC', calendar.pal(ncolors-1)), width = 0.6, height = 0.5)

    因此,您将蓝色作为框着色值向量中的第一种颜色。现在您将不得不使用函数调用本身。该函数有这个ncolors 参数,它控制有多少阴影,如果你将它设置为足够低的数字,它将开始使用颜色向量中的第一个阴影作为数据集中的最低值。例如,如果我对函数的本地副本进行相同的更改,然后运行以下命令

    start_date <- as.Date('2015-01-01') 
    end_date <- as.Date('2017-01-01')
    dates <- as.Date(sample( as.numeric(start_date): as.numeric(end_date), 56, replace = T), origin = '1970-01-01')
    calendarHeat(dates,c(0:55), color='r2r', ncolors = 14)
    
    

    我得到下面的图,我发送的数据中只有一个零,而且它只有一个蓝色框,所以它可以正确渲染它。

    您将不得不使用 ncolors 参数,将其降低直到获得预期数量的蓝色框,这并不理想,但它会起作用。

    至于最低颜色为蓝色,0 为白色,其他颜色为一系列颜色,我没有尝试过,但这并不容易。 Levelplot 采用cuts 参数,该参数是划分数据集的级别数。即。这里默认值为 99(这是我们在使用 ncolors 参数时实际更改的参数),因此它获取您传递的所有值并将它们分成 99 个颜色括号。因此,如果您有 -20:35 的值,例如,您可以手动创建一个数组,其中包含从红色到红色的 75 种阴影。然后将第一个值替换为蓝色,将位置 20(对应于 0)的值替换为白色,并传递它而不是 col.regionscolorkey,问题是您必须对每个数据集重复此操作并微调ncolors 参数,并检查每次它是否在正确数量的白色/蓝色字段中着色,此时将日历从红色变为红色并填充蓝色可能会更容易和 InkScape 中的白色字段。

    【讨论】:

    • 谢谢!我应该在哪里添加 calendarHeat(dates,vals, color='b2r')?当我在第 86 行下添加它时,出现错误:calendarHeat(dates, vals, color = "b2r") 中的错误:找不到函数 "calendarHeat"
    • 啊,我想我现在明白你的意思了。但这不是我所要求的。当我只添加 b2r
    • 使用您发布的代码很难实现这一点,我已经改进了我的答案,但最简单的方法是制作一个全红色的日历并填写白色和蓝色手动字段,因为日历的代码已经很老套了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    相关资源
    最近更新 更多