R pivot_longer и панель ошибок ggplot с двумя столбцами name / key - PullRequest
0 голосов
/ 06 мая 2020

Предположим, у нас есть следующие искусственные данные:

  df <- data.frame(Year = c(2015,2016,2017,2018),
               GPP_mean = c(1700,1800,1750,1850),
               Reco_mean = c(-1700,-1800,-1750,-1850),
               GPP_min = c(1600,1700,1650,1750),
               GPP_max = c(1800,1900,1850,1950),
               Reco_min = c(-1600,-1700,-1650,-1750),
               Reco_max = c(-1800,-1900,-1850,-1950))

Я хотел бы построить столбцы для каждого среднего значения и использовать столбцы min / max для столбца ошибок. Вот чего я добился до сих пор:

df %>%
    pivot_longer(cols = -Year,
                 names_to = c("variable", "stats"),
                 names_sep = "_") 

Что дает нам:

    # A tibble: 24 x 4
    Year variable stats value
   <dbl> <chr>    <chr> <dbl>
 1  2015 GPP      mean   1700
 2  2015 Reco     mean  -1700
 3  2015 GPP      min    1600
 4  2015 GPP      max    1800
 5  2015 Reco     min   -1600
 6  2015 Reco     max   -1800
 7  2016 GPP      mean   1800
 8  2016 Reco     mean  -1800
 9  2016 GPP      min    1700
10  2016 GPP      max    1900
# … with 14 more rows

Пока все хорошо (я полагаю?). С этого момента я понятия не имею, как я могу сказать ggplot отображать средние значения в виде столбцов и использовать min / max для столбцов ошибок. Любая помощь приветствуется, спасибо.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

дополнительное решение с использованием tidyverse

library(tidyverse)
out <- df %>% 
  pivot_longer(-Year, names_sep = "_", names_to = c("index", ".value"))

ggplot(out, aes(Year, mean, fill = index)) +
  geom_col() +
  geom_errorbar(aes(ymin = min, ymax = max), width = 0.5)
1 голос
/ 06 мая 2020

Вам следует придерживаться исходного фрейма данных. Для этого больше не нужно поворачиваться:

  ggplot(df, aes(Year, GPP_mean)) + 
    geom_col(fill = "forestgreen", colour = "black") + 
    geom_errorbar(aes(ymin = GPP_min, ymax = GPP_max), width = 0.5) +
    geom_col(aes(y = Reco_mean), fill = "red", colour = "black", position = "dodge") + 
    geom_errorbar(aes(ymin = Reco_max, ymax = Reco_min), width = 0.5)

enter image description here

...