Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.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 如何将图例添加到数据帧中具有多列数据的多个组的ggplot中_R_Ggplot2_Plot - Fatal编程技术网

R 如何将图例添加到数据帧中具有多列数据的多个组的ggplot中

R 如何将图例添加到数据帧中具有多列数据的多个组的ggplot中,r,ggplot2,plot,R,Ggplot2,Plot,我有一个60x13数据框,包含4组数据,1列是1-60个月的时间,1列是时间点n的中值,2列是时间点n的可信区间。我想生成一个图,其中有一条实线作为置信区间的中位数,一条虚线作为置信区间,我可以通过添加每一列作为它自己的几何线,并通过匹配中间点的颜色和它们相应的可信区间手动分组来实现这一点,但是,我无法添加图例。任何帮助都将不胜感激 ggplot(data=data1, aes(x=month)) + xlab("Month") + ylab(&quo

我有一个60x13数据框,包含4组数据,1列是1-60个月的时间,1列是时间点n的中值,2列是时间点n的可信区间。我想生成一个图,其中有一条实线作为置信区间的中位数,一条虚线作为置信区间,我可以通过添加每一列作为它自己的几何线,并通过匹配中间点的颜色和它们相应的可信区间手动分组来实现这一点,但是,我无法添加图例。任何帮助都将不胜感激

ggplot(data=data1, 
       aes(x=month)) +
  xlab("Month") +
  ylab("Hazard Ratio") +
  theme(plot.title = element_text(hjust = 0.5)) +
  geom_line(aes(y=median),
            color = "#4682B4",
            size = 1) +
  geom_line(aes(y=ucrd),
            color = "#4682B4",
            linetype=2,
            size = 0.9,
            alpha=0.5) +
  geom_line(aes(y=lcrd),
            color = "#4682B4",
            linetype=2,
            size = 0.9,
            alpha=0.5) +
  geom_line(aes(y=median.1),
            color = "#4BB446",
            size = 1) +
  geom_line(aes(y=ucrd.1),
              color = "#4BB446",
            linetype=2,
            size = 0.9,
            alpha=0.5) +
  geom_line(aes(y=lcrd.1),
            color = "#4BB446",
            linetype=2,
            size = 0.9,
            alpha=0.5) + 
  geom_line(aes(y=median.2),
          color = "#AF46B4",
          size = 1) +
  geom_line(aes(y=ucrd.2),
            color = "#AF46B4",
            linetype=2,
            size = 0.9,
            alpha=0.5) +
  geom_line(aes(y=lcrd.2),
            color = "#AF46B4",
            linetype=2,
            size = 0.9,
            alpha=0.5) +
  geom_line(aes(y=median.3),
            color = "#B47846",
            size = 1) +
  geom_line(aes(y=ucrd.3),
            color = "#B47846",
            linetype=2,
            size = 0.9,
            alpha=0.5) +
  geom_line(aes(y=lcrd.3),
            color = "#B47846",
            linetype=2,
            size = 0.9,
            alpha=0.5)
scale_color_manual(name= "Treament",
                     values=c("4682B4", "4BB446", "AF46B4", "B47846"),
                       labels=c("a", 
                                "b",
                                "c",
                                "d"
                       ))





这听起来很像一个数据形状问题。由于没有提供任何数据,下面是一个使用虚拟数据的示例。 首先,我们按照您在文本中提到的形状大致生成一些数据

library(tidyr)
library(ggplot2)

n <- 60
df <- data.frame(
  time = seq_len(n),
  group1_median = rnorm(n),
  group1_low = rnorm(n, -2),
  group1_high = rnorm(n, 2),
  group2_median = rnorm(n),
  group2_low = rnorm(n, -2),
  group2_high = rnorm(n, 2),
  group3_median = rnorm(n),
  group3_low = rnorm(n, -2),
  group3_high = rnorm(n, 2),
  group4_median = rnorm(n),
  group4_low = rnorm(n, -2),
  group4_high = rnorm(n, 2)
)
然后,它将以相当不错的形状放入ggplot2,传奇将自行整理

ggplot(df, aes(time, colour = group)) +
  geom_line(aes(y = median)) +
  geom_ribbon(aes(ymin = low, ymax = high),
              linetype = 2, fill = NA)


如果有人有更合适的重塑策略,我很想听听,因为我也在学习正确的旋转。

我觉得你的旋转方式很不错。我记得曾经看过哈德利的一条评论或回答,可能每一次重塑都可以通过2-3步(然后收集和传播)完成。这是一个有人要求一次收集(或传播,我忘了)几个变量到其他几个变量的问题。我个人可能会倾向于选择更“积极”的栏目,例如,
cols=matches(“group”)
,但这在很大程度上取决于给定的数据,因此很难概括出我所指的评论,但它越来越接近了。也可以看到他对akrun回答的评论谢谢Tjebo!可能会在这里或那里做一些ggplot2,但我不是一个很纠结数据的用户:')完美的答案,正是我需要的,谢谢!
df <- pivot_wider(
  df, names_from = "metric"
)
ggplot(df, aes(time, colour = group)) +
  geom_line(aes(y = median)) +
  geom_ribbon(aes(ymin = low, ymax = high),
              linetype = 2, fill = NA)