gpt4 book ai didi

r - ggplot2中的渐变填充

转载 作者:行者123 更新时间:2023-12-04 10:32:45 25 4
gpt4 key购买 nike

如果有以下情节,请说。

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))

我想要一个渐变填充而不是蓝色(从蓝色到红色 - 垂直。所以从底部的蓝色和顶部的红色开始,并带有一个参数来控制颜色变化的平滑度)。

我找到了以下资源: https://ggplot2.tidyverse.org/reference/scale_gradient.html

不幸的是,我的数据不是连续的(?)。

最佳答案

下面的代码会做到这一点(但水平):

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

Ribbon-Horizontally

如果你想让它垂直,你可以使用 coord_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))

Ribbon-Vertically

或者,如果您希望它水平且具有垂直梯度(如您所要求的),您可能需要通过处理数据并使用 geom_segment() 而不是 geom_ribbon(),像下面这样:

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))

这将为您提供以下内容:

enter image description here

希望对您有所帮助。

关于r - ggplot2中的渐变填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53397131/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com