使用pivot_Widther在ggplot2中按组打印geom_功能区

使用pivot_Widther在ggplot2中按组打印geom_功能区,r,ggplot2,ribbon,R,Ggplot2,Ribbon,基于,我尝试按组和不同的线型绘制线,并在每个子组下为该组添加一个颜色阴影。因此,我有一个组modif,我需要为下划线功能区上色,并有grp来指定线型。理想情况下,如果线条为黑色/与功能区颜色相同(功能区应具有一些alpha)。由于我的功能区不是置信区间的指标,而是绘制其他组的最小值和最大值,因此我使用~pivot\u wide并相应地定义ymin=c,ymax=a 这是我想要得到的,包括按组划分的线条图和色带: 这就是我到目前为止所得到的,没有基本的色带: 以下是我的虚拟示例: # Make

基于,我尝试按组和不同的线型绘制线,并在每个子组下为该组添加一个颜色阴影。因此,我有一个组
modif
,我需要为下划线
功能区
上色,并有
grp
来指定
线型
。理想情况下,如果线条为黑色/与功能区颜色相同(功能区应具有一些alpha)。由于我的
功能区
不是置信区间的指标,而是绘制其他组的最小值和最大值,因此我使用
~pivot\u wide
并相应地定义
ymin=c,ymax=a

这是我想要得到的,包括按组划分的线条图和色带:

这就是我到目前为止所得到的,没有基本的色带:

以下是我的虚拟示例:

# Make a different colur of shade by group

library(ggplot2)
library(tidyr)

# example for shaded line plot
dd1 <- data.frame(year = c(1:5),
                 grp = rep(c("a", "b", "c"), each = 5),
                 vals = c(5, 5.2, 5.6, 5.8, 6,
                          5, 4.9, 4.8, 4.7, 4.2,
                          5, 4.8, 4.4, 4,   3),
                 modif = rep('no', each = 15))

dd2 <- dd1
dd2$vals = dd1$vals*0.8
dd2$modif = 'yes'

# Put data together
dd <- rbind(dd1, dd2)

# Get a plot
dd %>% 
  ggplot(aes(x = year)) +
 geom_ribbon(
  data = ~ pivot_wider(., names_from = grp,
                      values_from = vals),
  aes(ymin = c, ymax = a, fill = modif)
 ) +
  ylim(0,6.5) +
   geom_line(aes(y = vals,color = modif, linetype = grp), 
            lwd  = 1.5)  +
 
  theme_bw()
#按组制作不同颜色的阴影
图书馆(GG2)
图书馆(tidyr)
#阴影线图示例

dd1您的代码运行时没有错误,并给出了预期的输出。您是否尝试过启动新的R会话并运行此代码?谢谢您的回答@teunbrand!嗯,奇怪,我仍然有相同的错误输出,重新启动R,甚至我的电脑。。。我的R版本是x86_64-w64-mingw32平台上的3.6.1(2019-07-05)。也许我需要升级。或者你有什么建议,为什么这不起作用,以及与错误相关的是什么?我认为ggplot2与以前的3或4个R小版本保持反向兼容性,所以在R4.2或4.3出现之前(可能明年),R3.6.1应该是好的。您使用的是什么版本的ggplot2?您的示例可以直接从剪贴板中重新绘制,无需修改,而且错误不是很具有描述性,因此我不知道是什么原因造成的。您好,我的ggplot是ggplot2_3.3.2。我还试图更新我的dplyr和tidyr库,因为出现了警告消息:在加载“dplyr”时,将以前的导入“vctrs::data_frame”替换为“tibble::data_frame”,但似乎没有帮助。我问了一位同事(两人都使用相同的R,由于工作电脑没有管理员权限),但它也没有显示功能区。我不知道还能做什么?哦,你是不是在分享你正在使用的导致错误的全部代码?错误消息与运行
max()
方法并返回
-Inf
有关。这表示当
max()
发送一个空向量时出现的错误-换句话说,只是在控制台中运行
max()
。这意味着
max()。通常有些东西会被过滤并发送到
max()
,但实际上什么都没有。。。类似的东西,但我在你的代码中找不到任何与之相关的东西。