Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R pivot_longer和ggplot errorbar,带有两个名称/键列_R_Ggplot2_Tidyr_Errorbar - Fatal编程技术网

R pivot_longer和ggplot errorbar,带有两个名称/键列

R pivot_longer和ggplot errorbar,带有两个名称/键列,r,ggplot2,tidyr,errorbar,R,Ggplot2,Tidyr,Errorbar,假设我们有以下人工数据: 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(180

假设我们有以下人工数据:

  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))
这给了我们:

    # 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
#一个tible:24 x 4
年份变量统计值
1 2015年GPP平均值1700
2 2015年记录平均值-1700
2015年3月GPP最低1600
4 2015年GPP最高1800
5 2015年最低记录-1600
6 2015年记录最大值-1800
7 2016年GPP平均值1800
8 2016年记录平均值-1800
9 2016年GPP最低1700
10 2016年GPP最大值1900
#…还有14行
到目前为止,还不错(我想是吧?)。
从这里开始,我不知道如何告诉ggplot将平均值绘制为条形图,并将min/max用于errorbar。感谢您的帮助。

您应该坚持使用原始数据框。无需再为此进行重点讨论:

ggplot(df,aes(年份,GPP_平均值))+
几何颜色(fill=“forestgreen”,color=“black”)+
几何误差条(aes(ymin=GPP_最小值,ymax=GPP_最大值),宽度=0.5)+
几何颜色(aes(y=记录平均值),填充=“红色”,颜色=“黑色”,位置=“道奇”)+
几何误差条(aes(ymin=记录最大值,ymax=记录最小值),宽度=0.5)

您应该坚持使用原始数据框。无需再为此进行重点讨论:

ggplot(df,aes(年份,GPP_平均值))+
几何颜色(fill=“forestgreen”,color=“black”)+
几何误差条(aes(ymin=GPP_最小值,ymax=GPP_最大值),宽度=0.5)+
几何颜色(aes(y=记录平均值),填充=“红色”,颜色=“黑色”,位置=“道奇”)+
几何误差条(aes(ymin=记录最大值,ymax=记录最小值),宽度=0.5)

使用
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)
库(tidyverse)
超出%
pivot_更长(-Year,names_sep=“u”,names_to=c(“index”,“.value”))
ggplot(out,aes(年份,平均值,填充=指数))+
geom_col()+
几何误差条(aes(ymin=min,ymax=max),宽度=0.5)

使用
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)
库(tidyverse)
超出%
pivot_更长(-Year,names_sep=“u”,names_to=c(“index”,“.value”))
ggplot(out,aes(年份,平均值,填充=指数))+
geom_col()+
几何误差条(aes(ymin=min,ymax=max),宽度=0.5)

一段时间以来,我一直避免使用“聚集/旋转”,现在我正在尝试适应它,因为我认为这就是tidyverse的用途。但似乎在某些情况下,“整洁”的data.frame弊大于利。我仍然想知道是否有可能以我的方式绘制数据,但无论如何,谢谢你的回答。@FelixPhl我仍然认为这是整洁的数据。每个观测值有6个变量,4个唯一观测值(年)。长时间旋转是一个强大的工具,我经常使用它,但工具的存在只是为了帮助我们实现最终产品。如果你发现你只是因为“这就是你应该做的”而使用某个特定的工具,而这样做对你或其他任何人都没有任何好处,那么你将在一段时间内进入“我避免聚集/旋转”的领域,现在我正试着去适应它,因为我认为这就是tidyverse的使用方式。但似乎在某些情况下,“整洁”的data.frame弊大于利。我仍然想知道是否有可能以我的方式绘制数据,但无论如何,谢谢你的回答。@FelixPhl我仍然认为这是整洁的数据。每个观测值有6个变量,4个唯一观测值(年)。长时间旋转是一个强大的工具,我经常使用它,但工具的存在只是为了帮助我们实现最终产品。如果你发现你只是因为“这是你应该做的”而使用某个特定的工具,而这样做对你或其他任何人都毫无益处,那么你就进入了