【问题标题】:Gradient fill columns using ggplot2 doesn't seem to work使用 ggplot2 的渐变填充列似乎不起作用
【发布时间】:2018-03-16 12:27:29
【问题描述】:

我想在此图表的每个条形中创建一个从红色(低)到绿色(高)的渐变。

目前我在geom_col 中使用特定颜色,但希望每个单独的条形图根据它所描绘的值从红色变为绿色。

这是我的图表的简化版本(图表上还有一个geom_line(以及其他一些内容,例如标题、轴调整等),但它与这个问题无关,所以我有将其从示例中排除):

我已经从列中删除了硬编码的颜色,并尝试使用诸如 scale_fill_gradient(以及许多其他类似函数)之类的东西来对所述列应用渐变,但似乎没有任何效果。

这是我使用scale_fill_gradient(low = "red", high = "green")时的输出:

我想要的是每个条都有自己的渐变,而不是每个条代表所述渐变中的一个步骤。

如何使用ggplot2 实现这一目标?

上述(绿色)示例的代码:

ggplot(data = all_chats_hn,
       aes(x = as.Date(date))) +
geom_col(aes(y = total_chats),
         colour = "black",
         fill = "forestgreen")

【问题讨论】:

  • 您的geom_line 使用colour 美学吗?
  • @bouncyball 是的,确实如此,但即使在我提供的示例代码中,它仍然无法产生所需的输出。

标签: r ggplot2 gradient


【解决方案1】:

我不确定geom_col 是否可行。可以通过使用geom_line 和一些数据扩充来实现。我们必须使用y 值来创建一系列 y 值 (y_seq),以便渐变着色起作用。我们还会创建y_seq_scaled,以防您希望每行都有“独立”渐变。

library(tidyverse)
set.seed(123) # reproducibility

dat <- data_frame(x = 1:10, y = abs(rnorm(10))) %>%
  group_by(x) %>%
  mutate(y_seq = list(seq(0, y, length.out = 100))) %>% # create sequence
  unnest(y_seq) %>%
  mutate(y_seq_scaled = (y_seq - mean(y_seq)) / sd(y_seq)) # scale sequence

# gradient for all together
ggplot(dat, aes(x = factor(x), y = y_seq, colour = y_seq))+
  geom_line(size = 2)+
  scale_colour_gradient(low = 'red', high = 'green')

# independent gradients per x
ggplot(dat, aes(x = factor(x), y = y_seq, colour = y_seq_scaled))+
  geom_line(size = 2)+
  scale_colour_gradient(low = 'red', high = 'green')

【讨论】:

    猜你喜欢
    • 2012-08-14
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    相关资源
    最近更新 更多