使用ggplot2绘制同一图表中不同年份的两行

时间:2017-12-13 22:05:11

标签: r ggplot2 charts

我试图将奥巴马的第一年支持率与特朗普在线图中的第一年支持率进行比较。

这里遇到的麻烦是我使用两年不同的奥巴马(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

1 个答案:

答案 0 :(得分:2)

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

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