如何在R中将条形图与折线图重叠?

时间:2020-02-20 01:30:58

标签: r ggplot2 subset

我希望根据数周的时间来节省数据的时间。我希望最近的年份(2020)是聊天,以前的年份(2019&2018)是线条图。

我当前的代码会在下面显示视觉效果

data %>%
  ggplot(aes(week, result, fill = year)) +
  geom_col()

Chart

如果我想使所有年份成为条形图,我知道可以在geom_col中使用“ dodge”。但是,我正在尝试将数据拆分为不同的地理区域

当我使用子集函数(下面的代码)时,我的图表发生了一些奇怪的事情,我无法弄清楚发生了什么

data %>%
  ggplot(aes(week, result, fill = year)) +
  geom_col(data = subset(data, year == 2020)) +
  geom_line(data = subset(data, year != 2020))

Chart 2

下面是我正在使用的数据的样本。关于我在做什么错的任何想法吗?

structure(list(year = c("2018", "2018", "2019", "2019", "2020", 
"2020"), week = c(1L, 2L, 1L, 2L, 1L, 2L), result = c(6.88475831020016, 
7.62267452779933, 3.67553313593328, 6.18354398162893, 2.38101968527051, 
5.9596355812872)), .Names = c("year", "week", "result"), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

1 个答案:

答案 0 :(得分:0)

我不确定您的错误在哪里,但是通过我的虚拟示例模仿您的示例,我只是在color中添加了aes以便按年份对行进行分组,其余的代码是与您的相似:

ggplot(df, aes(x = week, y = Value, 
               color = as.factor(year),
               fill = as.factor(year)))+
  geom_col(data = subset(df, year == 2020)) +
  geom_line(data = subset(df, year != 2020))

enter image description here

数据

df <- data.frame(year = rep(2018:2020, each = 7),
                 week = rep(1:7,3),
                 Value = rnorm(21))

使用OP数据进行编辑

根据您的数据,您只需要基于字符值而不是@camille指出的数字进行子集:

ggplot(df, aes(x = week, y = result, 
                 color =year,
                 fill = year))+
    geom_col(data = subset(df, year == "2020")) +
    geom_line(data = subset(df, year != "2020"))

enter image description here