【问题标题】:ggplot2: color area between two crossbarsggplot2:两个横杆之间的颜色区域
【发布时间】:2019-04-26 22:47:18
【问题描述】:

是否可以在 ggplot2 中仅对条形图的一部分着色?
我想要横杆之间的彩色区域:“平均每日最大值”和“平均每日最小值”。 这是我的数据:

temperature <- read.table(text = 'X  1  2  3  4  5  6
                          1 "Highest temperature" 31 40 39 34 39 42
                          2 "Mean daily maximum" 27 34 32 30 34 35
                          3 "Mean daily minimum" 26 31 31 30 31 35
                          4 "Lowest temperature" 18 20 20 20 20 24', header =T)

t <- dcast(melt(temperature), variable~X)
ggplot(t, aes(x=variable,ymin = `Lowest temperature`, 
              ymax = `Highest temperature`, lower = `Lowest temperature`, 
              upper = `Highest temperature`, middle = `Mean daily maximum`)) + 
  geom_boxplot(stat = 'identity') +
  xlab('Number') + 
  ylab('Temperature') +
  geom_crossbar(aes(y = `Mean daily maximum` ))+
  geom_crossbar(aes(y = `Mean daily minimum`))

【问题讨论】:

    标签: r ggplot2 colors


    【解决方案1】:
    library(ggplot2)
    library(reshape2)
    
    read.table(
      text = 'X  1  2  3  4  5  6
    1 "Highest temperature" 31 40 39 34 39 42
    2 "Mean daily maximum" 27 34 32 30 34 35
    3 "Mean daily minimum" 26 31 31 30 31 35
    4 "Lowest temperature" 18 20 20 20 20 24', 
      header = TRUE
    ) -> temperature
    
    temp_long <- reshape2::dcast(reshape2::melt(temperature), variable~X)
    
    ggplot(
      temp_long, 
      aes(
        x = variable,
        ymin = `Lowest temperature`, 
        ymax = `Highest temperature`, 
        lower = `Lowest temperature`, 
        upper = `Highest temperature`, 
        middle = `Mean daily maximum`
      )
    ) + 
      geom_boxplot(stat = 'identity') +
      geom_rect(
        aes(
          xmin = as.numeric(variable)+0.45, 
          xmax = as.numeric(variable)-0.45,
          ymin = `Mean daily minimum`,
          ymax = `Mean daily maximum`
        ),
        fill = "#a50f15"
      ) +
      geom_crossbar(aes(y = `Mean daily maximum` )) +
      geom_crossbar(aes(y = `Mean daily minimum`)) +
      labs(x = 'Number', y = 'Temperature')
    

    【讨论】:

      猜你喜欢
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多