使用ggplot2在同一图中绘制不同年份的两条线。

3

我正在尝试用折线图比较奥巴马第一年和特朗普第一年的批准率。

问题在于,我使用了两个不同的年份:奥巴马是2009年,特朗普是2017年。看起来我无法解决这个问题...

rating_comparison %>%
  ggplot(aes(endDate, rating, group = 1)) +
  geom_line(data = filter(rating_comparison, 
                          endDate > "2017-01-28",
                          type == "Overall.A")) +
  geom_line(data = filter(rating_comparison, 
                          president == "Obama" &
                            endDate > "2009-01-25" &
                            endDate < "2010-01-24",
                          type == "Overall.A")) 

enter image description here


2
你需要将日期转换为可比较的形式,例如自就职以来的天数或周数。查看数据“rating_comparison”会有所帮助。 - neilfws
是的,那可能行。这是一个相当大的数据集... - Tdebeus
另一种策略是将所有的奥巴马日期加8年,这样两组数据都将有2017年的年份,并在相同的x值上绘制,然后设置轴标签仅显示月份和日期,而不是年份 + scale_x_date(date_labels = "%b %d") - Jan Boyer
1个回答

3
我会从您的代码中推断出数据看起来像这样:

我会假设您的代码中的数据看起来像这样:

president   startDate    endDate  rating       type
    Obama  2017-01-17 2017-01-19      59  Overall.A
    Trump  2017-01-25 2017-01-27      42  Overall.A

我假设日期列的类型为Date。如果不是,请使用以下方法进行转换:
rating_comparison$endDate <- as.Date(rating_comparison$endDate, "%Y-%m-%d")

一种方法是将每个总统的日期转换为“自第一天以来的天数”。然后将评分与天数绘制图表。当然,这假设“第一天”可以相互比较——我假设它们等同于每届总统的第一次民意调查日期。
例如,按总统着色,限制在前365天:
library(dplyr)
library(ggplot2)
rating_comparison %>% 
  filter(type == "Overall.A") %>%
  group_by(president) %>% 
  mutate(Day = as.numeric(endDate - min(endDate))) %>% 
  ungroup() %>% 
  filter(Day <= 365) %>% 
  ggplot(aes(Day, rating)) + 
    geom_line(aes(color = president))

我从网上获取了一些Gallup的数据,与您的数据类似但不完全相同,得出了这个结果:

enter image description here


感谢您的全面回答。奥巴马的日期不是来自2017年,而是来自2009年。 - Tdebeus
当然。诀窍在于使年份无关紧要,通过将每位总统的所有日期相对于第一个日期来实现。 - neilfws

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接