R ggplot2中的渐变填充

R ggplot2中的渐变填充,r,ggplot2,R,Ggplot2,假设有以下情节 library(ggplot2) n <- 1169 df22 <- data.frame(x = 1:n, val = seq(0, 0.5, length.out = n), type = 1) ggplot(df22, aes(x = x, y = val)) + geom_ribbon(aes(ymax = val, ymin = 0, fill = type, group = type)) 库(ggplot2) n以下代码将执行此操作(但水平):

假设有以下情节

library(ggplot2)
n <- 1169
df22 <- data.frame(x = 1:n, val = seq(0, 0.5, length.out = n), type = 1)

ggplot(df22, aes(x = x, y = val)) +
  geom_ribbon(aes(ymax = val, ymin = 0, fill = type, group = type))
库(ggplot2)

n以下代码将执行此操作(但水平):

如果要使其垂直,可以使用
coord\u flip()
上下颠倒来翻转坐标

ggplot(df22, aes(x = val, y = x)) +
  geom_ribbon(aes(ymax = val, ymin = 0)) +
  coord_flip() +
  geom_col(aes(fill = val)) +
  scale_fill_gradient2(position="bottom" , low = "blue", mid = muted("blue"), high = "red", 
                       midpoint = median(df22$val)) 

或者,如果您希望它是水平的,具有垂直梯度(如您所要求的),您可能需要通过播放数据并使用
geom_段()
而不是
geom_功能区()
,来绕过它,如下所示:

vals <- lapply(df22$val, function(y) seq(0, y, by = 0.001))
y <- unlist(vals)
mid <- rep(df22$x, lengths(vals))
d2 <- data.frame(x = mid - 1, xend = mid + 1, y = y, yend = y)

ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = yend, color = y)) +
  geom_segment(size = 1) +
  scale_color_gradient2(low = "blue", mid = muted("blue"), high = "red", midpoint = median(d2$y)) 

vals要做到这一点并不容易
scale\u gradient
用于将数据映射到不同的颜色。您没有对应于不同颜色的数据。这里有一些棘手的问题(可能会被愚弄),例如,非常感谢你给出的好答案。我已经投了一票,因为我们非常接近。我会要求“垂直。所以从底部的蓝色和顶部的红色开始”,这也是可能的吗?谢谢你的回答。不幸的是,这是不可能的。它必须是垂直的-底部是蓝色,顶部是红色。
vals <- lapply(df22$val, function(y) seq(0, y, by = 0.001))
y <- unlist(vals)
mid <- rep(df22$x, lengths(vals))
d2 <- data.frame(x = mid - 1, xend = mid + 1, y = y, yend = y)

ggplot(data = d2, aes(x = x, xend = xend, y = y, yend = yend, color = y)) +
  geom_segment(size = 1) +
  scale_color_gradient2(low = "blue", mid = muted("blue"), high = "red", midpoint = median(d2$y))