簡體   English   中英

ggplot2:更改錯誤欄的顏色,而不會丟失自定義的躲避參數

[英]ggplot2: change the color of error bars w/o losing customized dodge parameters

我想將誤差線的顏色更改為不同的顏色,而無需更改圖形上點的位置。

這是我的一些數據:

df <- structure(
  list(
    yrmonth = structure(
      c(
        1483228800,
        1483228800,
        1483228800,
        1485907200,
        1485907200,
        1485907200,
        1488326400,
        1488326400,
        1488326400,
        1491004800,
        1491004800,
        1491004800
      ),
      class = c("POSIXct", "POSIXt"),
      tzone = "UTC"
    ),
    index = structure(
      c(1L, 3L, 5L, 1L, 3L, 5L, 1L, 3L, 5L, 1L, 3L, 5L),
      .Label = c("N-S", "N-S", "E-W", "E-W", "OS"),
      class = "factor"
    ),
    N = c(2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1),
    GDDLettuce = c(129, 141, 27, 150.5, 209, 87, 247.5,
                   243, 188, 223, 226.5, 170),
    sd = c(
      1.4142135623731,
      4.24264068711928,
      NA,
      4.94974746830583,
      65.0538238691624,
      NA,
      12.0208152801713,
      8.48528137423857,
      NA,
      5.65685424949238,
      0.707106781186548,
      NA
    ),
    se = c(1, 3, NA, 3.5, 46, NA, 8.5, 6, NA, 4, 0.5, NA),
    ci = c(
      12.7062047361747,
      38.1186142085241,
      NA,
      44.4717165766114,
      584.485417864036,
      NA,
      108.002740257485,
      76.2372284170481,
      NA,
      50.8248189446988,
      6.35310236808735,
      NA
    )
  ),
  .Names = c("yrmonth", "index", "N", "data", "sd", "se", "ci"),
  row.names = 31:42,
  class = "data.frame"
)

我的圖形完全按照我想要的方式設置,並在正確的位置顯示了誤差線:

ggplot(df, aes(x=yrmonth,y=data,colour=factor(index))) + 
  geom_line(size=1, position = position_dodge(width = -300000)) + ylim(min(df$data), max(df$data)) +
  geom_errorbar(aes(ymin=data-se, ymax=data+se), width = 1000000, size = .5, 
                position = position_dodge(width = -300000))

當我添加一種顏色時,條形的顏色會發生變化,但會刪除我輸入的所有width和dodge參數:

ggplot(df, aes(x=yrmonth,y=data,colour=factor(index))) + 
  geom_line(size=1, position = position_dodge(width = -300000)) + ylim(min(df$data), max(df$data)) +
  geom_errorbar(aes(ymin=data-se, ymax=data+se), colour = "black", width = 1000000, size = .5, 
                position = position_dodge(width = -300000))

我希望EW錯誤欄為深綠色,NS錯誤欄為深紅色。 我希望線條本身保持相同的顏色。 最重要的是,我希望誤差線保持在相同的位置。 由於某種原因,每次更改顏色時,錯誤條和錯誤線的位置都會發生變化。

嘗試在您的第一個繪圖代碼中再添加一個scale_color_manual層,如下所示:

ggplot(df, aes(x=yrmonth,y=data,colour=factor(index))) + 
  geom_line(size=1, position = position_dodge(width = -300000)) + ylim(min(df$data), max(df$data)) +
  geom_errorbar(aes(ymin=data-se, ymax=data+se), width = 1000000, size = .5, 
            position = position_dodge(width = -300000))+
  scale_color_manual(values = c('darkblue', 'darkgreen', 'darkred'))

一個快速簡便的解決方案是

require(dplyr)
ggplot(df %>% mutate(errorColors = ifelse(index=="N-S","darkred",ifelse(index=="E-W","darkgreen",NA))), aes(x=yrmonth,y=data)) + 
    geom_line(aes(group=index,color=index),size=1, position = position_dodge(width = -300000)) + ylim(min(df$data), max(df$data)) +
    geom_errorbar(aes(ymin=data-se, ymax=data+se,color=errorColors), width = 1000000, size = .5, 
                  position = position_dodge(width = -300000))+scale_color_manual(breaks=c("E-W","N-S","OS"),values=c("darkgreen","darkred","green","red","blue"))

暫無
暫無

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

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