我希望根据数周的时间来节省数据的时间。我希望最近的年份(2020)是聊天,以前的年份(2019&2018)是线条图。
我当前的代码会在下面显示视觉效果
data %>%
ggplot(aes(week, result, fill = year)) +
geom_col()
如果我想使所有年份成为条形图,我知道可以在geom_col中使用“ dodge”。但是,我正在尝试将数据拆分为不同的地理区域
当我使用子集函数(下面的代码)时,我的图表发生了一些奇怪的事情,我无法弄清楚发生了什么
data %>%
ggplot(aes(week, result, fill = year)) +
geom_col(data = subset(data, year == 2020)) +
geom_line(data = subset(data, year != 2020))
下面是我正在使用的数据的样本。关于我在做什么错的任何想法吗?
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"))
答案 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))
数据
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"))