R 如何为热图创建特定的颜色渐变比例?

R 如何为热图创建特定的颜色渐变比例?,r,ggplot2,scale,colorbrewer,R,Ggplot2,Scale,Colorbrewer,我想为我的热图创建此颜色比例: [0-49]->深绿色 [50-99]->绿色 [100-149]->浅绿色 [150-199]->黄色 [200-299]->橙色 [300-…]->红色 以下是我的数据集示例: 我已经尝试了下面的代码,但不起作用: colfunc <-colorRampPalette(c("darkgreen", "lightgreen", "yellow", "orange", "red")) ggplot(DATASET, aes(x = BUS_NR, y =

我想为我的热图创建此颜色比例:

  • [0-49]->深绿色

  • [50-99]->绿色

  • [100-149]->浅绿色

  • [150-199]->黄色

  • [200-299]->橙色

  • [300-…]->红色

  • 以下是我的数据集示例:

    我已经尝试了下面的代码,但不起作用:

    colfunc <-colorRampPalette(c("darkgreen", "lightgreen", "yellow", "orange", "red"))
    ggplot(DATASET, aes(x = BUS_NR, y = MONTH_NR, fill = factor(ALERT_NB)) +
      geom_tile() +
      scale_fill_manual(values = colfunc(300))
    

    colfunc关键是定义一个函数,该函数在数据集中创建一个新列,定义颜色的类别(在我的例子中是z)。然后,您可以简单地将颜色映射到类并进行打印。下次请提供一个示例数据集。花了不少时间才弄明白,但现在可以工作了:

    library(ggplot2)
    x <- 1:10
    y <- x*x*x
    df <- data.frame(x,y)
    cols <- c("1"="darkgreen","2"="green", "3"="lightgreen", "4" = "yellow", "5"="orange", "6"="red")
    
    classof <- function(a){
      if (a<50){
        return(1)
      }
      if (a<100){
        return(2)
      }
      if (a<150){
        return(3)
      }
      if (a<200){
        return(4)
      }
      if (a<300){
        return(5)
      }
      else {
        return(6)
      }
    }
    z <- c()
    for (i in seq(1,length(y))){
      z <- c(z,classof(y[i]))
    }
    
    df$z <- z
    
    p <- ggplot(df, aes(x,y))+ geom_point(aes(colour = factor(z)))
    p + scale_colour_manual(values=cols)
    
    库(ggplot2)
    
    我会尝试把这个应用到我的热图上!您不需要定义函数来执行此操作:
    cut
    是一个基本函数,它将接受一个中断向量。还请记住,因为R是一种矢量化语言,所以您不需要使用
    循环来沿着向量应用函数,并且通过以这种方式绑定每次迭代来构建向量变得非常昂贵。我已经尝试过了,而且它工作得非常好!再次感谢您的帮助@benschbob91!嗨@camille我怎样才能用cut()替换函数“classof”?谢谢在你的情况下,它应该是:cut(y,breaks=c(50100150200300))如果没有a,很难回答这个问题-一个数据样本可以清楚地说明你在使用什么Hi Camille我已经用数据集更新了我的帖子!:)单击我的评论中的链接。有一些方法可以将我们可以加载到R中的数据示例包括在内,即不是TablesReform@camille的图片!我是堆栈溢出的新手!我还在学习它是如何工作的!我可以用cut()做练习,昨天我还发现了scale\u fill\u gradientn()函数,我真的很喜欢它!非常感谢您的时间和帮助!祝您有个美好的一天!