渐变颜色填充ggplot2中的条形图

Gradient colour fill a barplot in ggplot2

我想根据 Y 的值渐变填充 ggplot2 bar plot,但我想手动设置颜色。 几乎是我所需要的,但它根据 Y 的值设置调色板的限制,而我想根据生物压力阈值手动设置这些

下面是一些基于链接示例的示例代码。

 d <- data.frame(x = 1:4, y= c (0.1, 0.3, 1, 0.6))
    
    # interpolate values from zero to y and create corresponding number of x values
    vals <- lapply(d$y, function(y) seq(0, y, by = 0.01))
    y <- unlist(vals)
    mid <- rep(d$x, lengths(vals))
    d2 <- data.frame(x = mid - 0.4,
                     xend = mid + 0.4,
                     y = y,
                     yend = y)
    
    ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = yend, color = y)) +
      geom_segment(size = 2) +
      scale_color_gradient2(low = "green4", mid = "yellow", high = "red", 
                            midpoint = max(d2$y)/2) +
      coord_cartesian(ylim = c(0 , 2))

我希望 Y 值等于 2 时显示红色,而不是数据框中 Y 的最大值。

这个有用吗?刚刚切换到 scale_color_gradientn,这允许我们使用 values = 调用,我们在其中为各自的颜色指定三个值。 (以及其他一些小改动。)

    
    ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = yend, color = y)) +
      geom_segment(size = 2) +
      scale_y_continuous(limits = c(0, 2)) +
      scale_color_gradientn(colours = c("green4", "yellow", "red"), 
                            values = c("0", max(d2$y)/2, "2")) 

如果你知道先验你想要红色的值是多少(在你的例子中,2),你可以将中点设置为它的一半(1).

你的例子,但有一个额外的数据点来说明:

# d <- data.frame(x = 1:4, y= c(0.1, 0.3, 1, 0.6))
d <- data.frame(x = 1:5, y= c(0.1, 0.3, 1, 0.6, 2.0))
vals <- lapply(d$y, function(y) seq(0, y, by = 0.01))
y <- unlist(vals)
mid <- rep(d$x, lengths(vals))
d2 <- data.frame(x = mid - 0.4, xend = mid + 0.4, y = y, yend = y)

ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = yend, color = y)) +
  geom_segment(size = 2) +
  scale_color_gradient2(low = "green4", 
                        mid = "yellow", 
                        high = "red", 
                        midpoint = 1) + # changed here
  coord_cartesian(ylim = c(0 , 2))

如其他答案的评论中所述,您不会在原始数据中看到红色 - 使用您的原始数据集重新运行此处的代码以查看结果。