簡體   English   中英

顏色漸變顯示行 plot 的變化

[英]Colour gradient showing variance in line plot

我正在嘗試創建歷史數據的時間序列 plot ,該數據顯示單年數據,陰影包圍表示多年來數據中存在的可變性(最多 2 個標准偏差)。 我真的很希望這種陰影是一種顏色漸變,就像更接近平均值的更深的顏色變得更亮。

到目前為止,我已經設法使用以下代碼創建了一個帶有置信區間的時間序列圖

> library(ggplot2)

## Here is the what the data looks like. Not lower_ci and upper_ci are just
## Mean_sales - (2 * Std_dev_sales) and Mean_sales + (2 * Std_dev_sales) respectively. 
## upper_dif and lower_dif is simply the difference between the mean and
## the confidence intervals

> head(sales_summary, 3)
# A tibble: 3 x 7
  Date  Mean_sales Std_dev_sales lower_ci upper_ci lower_dif upper_dif
  <chr>      <dbl>         <dbl>    <dbl>    <dbl>     <dbl>     <dbl>
1 06-26   4761794.       970015. 2821763. 6701824. -1940030.  1940030.
2 06-27   4528859.       327306. 3874247. 5183471.  -654612.   654612.
3 06-28   5139476.      1105831. 2927814. 7351138. -2211662.  2211662.  

> theme_set(theme_classic())
> ggplot(data = sales_summary, 
>       aes(x = as.Date(Date, format = "%m-%d"), y = Mean_sales)) +
>  geom_ribbon(aes(ymin=lower_ci, 
>                  ymax=upper_ci), 
>              linetype=0, alpha=0.2,
>              fill = "blue")

給我這個基本的 plot

我目前創建漸變的解決方案是使用下面的代碼簡單地創建大量代表方差比例的 geom_ribbons。

ggplot(data = sales_summary, 
       aes(x = as.Date(Date, format = "%m-%d"), y = Mean_sales)) +
  #geom_line(color = "black", size = 1) +
  geom_ribbon(aes(ymin=lower_ci, 
                  ymax=upper_ci), 
              linetype=0, alpha=0.1,
              fill = "steelblue") +

  geom_ribbon(aes(ymin=lower_ci - (0.1 * lower_dif), 
                  ymax=upper_ci - (0.1 * upper_dif)), 
              linetype=0, alpha=0.1,
              fill = "steelblue") +

  geom_ribbon(aes(ymin=lower_ci - (0.2 * lower_dif), 
                  ymax=upper_ci - (0.2 * upper_dif)), 
              linetype=0, alpha=0.1,
              fill = "steelblue") +

  geom_ribbon(aes(ymin=lower_ci - (0.3 * lower_dif), 
                  ymax=upper_ci - (0.3 * upper_dif)), 
              linetype=0, alpha=0.1,
              fill = "steelblue") +

  geom_ribbon(aes(ymin=lower_ci - (0.4 * lower_dif), 
                  ymax=upper_ci - (0.4 * upper_dif)), 
              linetype=0, alpha=0.1,
              fill = "steelblue") +

  geom_ribbon(aes(ymin=lower_ci - (0.5 * lower_dif), 
                  ymax=upper_ci - (0.5 * upper_dif)), 
              linetype=0, alpha=0.1,
              fill = "steelblue") +

  geom_ribbon(aes(ymin=lower_ci - (0.6 * lower_dif), 
                  ymax=upper_ci - (0.6 * upper_dif)), 
              linetype=0, alpha=0.1,

              fill = "steelblue") +
  geom_ribbon(aes(ymin=lower_ci - (0.7 * lower_dif), 
                  ymax=upper_ci - (0.7 * upper_dif)), 
              linetype=0, alpha=0.1,
              fill = "steelblue") +

  geom_ribbon(aes(ymin=lower_ci - (0.8 * lower_dif), 
                  ymax=upper_ci - (0.8 * upper_dif)), 
              linetype=0, alpha=0.1,
              fill = "steelblue") +

  geom_ribbon(aes(ymin=lower_ci - (0.9 * lower_dif), 
                  ymax=upper_ci - (0.9 * upper_dif)), 
              linetype=0, alpha=0.1,
              fill = "steelblue")

這可以給我想要的效果,正如在這個plot中看到的那樣,但是復制粘貼很重,特別是因為我無法讓任何循環與 ggplot 一起工作(只有最后一次迭代 plot 曾經返回)。

提前致謝。

您可以將幾何list添加到 plot 以一次添加多個幾何。 這意味着您可以使用purrr::map創建具有不同比例的幾何圖形:

library(purrr)

ggplot(data = sales_summary, 
       aes(x = as.Date(Date, format = "%m-%d"), y = Mean_sales)) +
    map(seq(0.1, 1, by = 0.1), function(prop) {
        geom_ribbon(aes(ymin=lower_ci - (prop * lower_dif), 
                        ymax=upper_ci - (prop * upper_dif)), 
                    linetype=0, alpha=0.1,
                    fill = "steelblue")
    })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM