R:如何以日期为x轴,从两个不同的df对两个小平面ggplot进行分层?

R: how to layer two facet ggplot from two different df with dates as the x axis?

提问人:Maya Eldar 提问时间:9/15/2022 更新时间:9/15/2022 访问量:331

问:

我想将这两者结合起来:来自具有相同 X 轴 (s) 和相同 . 两个图:ggplotsfloor_datefacet_wrap

ggplot(averaged_activity,aes(x=date(DATETIME),y=PERCENTAGE), group = POPULATION) +
    geom_line(stat = "summary", fun = "mean")+ geom_point(stat = "summary", fun = "mean")+
    labs(y="Activity (%)", x = "Date")+
    scale_x_date(date_labels="%d/%m/%y",date_breaks  ="1 week")+
    scale_y_continuous()+
    facet_wrap(~POPULATION, ncol=1)

看起来像: enter image description here

ggplot(info_table, aes(x=floor_date(DATE_OF_METAMORPHOSIS, unit = "week"), group= POPULATION))+
  geom_histogram()+facet_wrap(~POPULATION, ncol=1)

看起来像:enter image description here我希望将两个图组合在同一张图上。

我尝试将直方图添加到第一个直方图中,我还尝试创建没有定义数据框的 ggplot 并在几何图形中定义数据帧。但是我尝试的每一种方法都得到了不同的错误,所有关于 r 在查找变量时遇到困难,例如 facet 中的“POPULATION”变量或 group commiss 或 y 轴中的“PERCENTAGE”变量。ggplotgeom_histogram(info_table, aes(x=floor_date(DATE_OF_METAMORPHOSIS, unit = "week"), group= POPULATION))

TNX!

R ggplot2 小平面 几何直方图

评论

0赞 Arthur 9/15/2022
我建议尝试拼凑包。patchwork.data-imaginist.com在 ggplot2 本身中,很难或不可能在不同的面上制作具有不同几何形状的图。
0赞 Allan Cameron 9/15/2022
这是可以做到的,但如果没有可重复的数据来告诉你如何做,那就非常困难了。
0赞 Maya Eldar 9/15/2022
我不是说在不同的面上有单独的几何图形,而是在相同的面上的相同 3 个几何图形(点、线和直方图)上,当直方图源自另一个数据框时。

答:

1赞 Bushidov 9/15/2022 #1

这是将两个图形拉在一起的选项。(根据评论,最好在您的问题中包含可重复的示例

傻瓜数据


set.seed(12)

df1 = data.frame(surname = rep(c("Zaura", "Garin", "Roberts"), 20),
                 DATETIME = rep(seq(as.Date('2022-01-01'), as.Date('2022-10-01'), by = "2 weeks"), 3), 
                 percentage = sample(seq(50, 300, 50), 60, prob =c(1000, 100, 50, 10, 5, 1), replace = T))
  
df2 = data.frame(surname = sample(c("Zaura", "Garin", "Roberts"), 50, replace =TRUE),
                 DATE_OF = sample(seq(as.Date('2022-07-01'), as.Date('2022-09-01'), by = "2 weeks"), 50, prob = c(10,100,1,200,20), replace = TRUE))

个人地块


p1 = ggplot(df1, aes(x=DATETIME, y=percentage))+
  geom_line(stat = "summary", fun = "mean")+
  geom_point(stat = "summary", fun = "mean")+
  facet_wrap(~surname, ncol=1)+
  labs(subtitle = "Plot 1")

p2 = ggplot(df2, aes(x=floor_date(DATE_OF, unit= "week")))+
  geom_histogram(aes(y = stat(count)))+
  facet_wrap(~surname, ncol =1)+
  labs(subtitle = "Plot 2")

library(ggpubr)
ggarrange(p1,p2)

enter image description here

将地块合并在一起


合并绘图的一个选项是调用 和 在每个 .另外,这里的一个问题是直方图计数最多约为 10 条,而线条可能有数百条。诀窍是将 here 乘以 10 以使它们叠加点。然后在 中,您可以调用第二个轴并进行逆变换。在我们的例子中,除以 10data=aes()geom_y = stat(count)scale_y_continuous()sec.axis = sec_axis(~ . / 10, name = "Count")

ggplot()+
  geom_histogram(data=df2, aes(x=floor_date(DATE_OF, unit= "week"), y = stat(count)*10), binwidth = 10)+
  geom_line(data=df1, aes(x=DATETIME, y=percentage), stat = "summary", fun = "mean")+
  geom_point(data=df1, aes(x=DATETIME, y=percentage), stat = "summary", fun = "mean")+
  scale_y_continuous("Percentage (%)", sec.axis = sec_axis(~ . / 10, name = "Count"))+
  facet_wrap(~surname, ncol=1)+
  labs(x="Date")

enter image description here