渐变颜色填充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))
如其他答案的评论中所述,您不会在原始数据中看到红色 - 使用您的原始数据集重新运行此处的代码以查看结果。
我想根据 Y 的值渐变填充 ggplot2
bar plot
,但我想手动设置颜色。
下面是一些基于链接示例的示例代码。
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))
如其他答案的评论中所述,您不会在原始数据中看到红色 - 使用您的原始数据集重新运行此处的代码以查看结果。