如何使列颜色等级取决于列长度(例如从浅绿色到深绿色或(绿色级别))

How to make the column color grade depends on the column length (eg. from light green to dark green or (green levels))

我想根据 ggplot2 柱条中的值使柱或条的颜色不同(例如,从浅绿色到深绿色或(绿色级别))。

我有一个简单的示例,需要进行两次修改。

1) 把正栏改成绿色,负栏改成红色

2) 根据条的长度使颜色从浅到深连续

我试图解决第一个问题,但出现错误。如果你能帮我解决这两个问题,我将不胜感激。提前致谢。

data.test <- data.frame(x = LETTERS[1:5],    
                   y = c(-4, 2, 7, 3, -5),
                  z = c("Negative","Positive","Positive","Positive","Negative"))

  ggplot(data.test, aes(x, y)) +               
  geom_col(position = "identity",aes(fill = z)) #+
    #scale_fill_manual(values = ifelse(data.test$y[1] > 0, c("#359206", "#de0025")
                                  #    ,c("#de0025","#359206")))

#最后两行代码是试做正绿负红,但报错如下:

Error in `f()`:
! Insufficient values in manual scale. 2 needed but only 1 provided.

Run `rlang::last_error()` to see where the error occurred.

尽管我在 scale_fill_manual 中提供了 2 个。

由于您的数据“符号”已经反映在列 y 中,您可以使用它来填充您的绘图。您需要的是 scale_fill_gradient,它允许对您的图进行渐变着色。

library(ggplot2)
data.test <- data.frame(x = LETTERS[1:5],    
                        y = c(-4, 2, 7, 3, -5),
                        z = c("Negative","Positive","Positive","Positive","Negative"))

ggplot(data.test, aes(x, y, fill = y)) + 
  geom_col() + 
  scale_fill_gradient(low = "red", high = "green")

reprex package (v2.0.1)

创建于 2022-04-12