ggplot:按月计算多年

azd*_*sci 7 plot r ggplot2

所以,我遇到了一些我认为没有遇到过的东西.我搜索谷歌寻找答案,但还没找到任何东西(还)...

我有两个数据集 - 一个用于2015年,一个用于2016年.它们代表了IT系统的可用性.数据框如下:

2015年数据集:

variable value
Jan 2015 100
Feb 2015 99.95
...      ...
Run Code Online (Sandbox Code Playgroud)

2015年数据集:

variable value
Jan 2016 99.99
Feb 2016 99.90
...      ...
Run Code Online (Sandbox Code Playgroud)

他们只是从1月到12月列出了系统的可用性."变量"列是as.yearmon数据类型,值是简单数字.

我想geom_line()用ggplot2 创建一个图表,它基本上将百分比作为y轴,将月份作为x轴.我已经能够做到这一点有两条线,但x轴从2015年1月到2016年12月.我想要的是让它们只按月绘制,所以它们重叠.我已经用尺度等尝试了各种各样的东西,但我还没弄清楚如何做到这一点.

基本上,我需要x轴按时间顺序读取1月到12月,但我想在同一图表上绘制2015年和2016年.这是我的ggplot代码(非工作),因为我现在拥有它:

ggplot(data2015,aes(variable,value)) +
geom_line(aes(color="2015")) +
geom_line(data=data2016,aes(color="2016")) +
scale_x_yearmon() +
theme_classic()
Run Code Online (Sandbox Code Playgroud)

当我处理yearmon()数据类型时,这将在连续流中绘制.我尝试过这样的事情:

ggplot(data2015,aes(months(variable),value)) +
geom_line(aes(color="2015")) +
geom_line(data=data2016,aes(color="2016")) +
theme_classic()
Run Code Online (Sandbox Code Playgroud)

显然这是行不通的.我想这months()可能仍然以某种方式带着这一年.如果我绘制它们,因为factors()它们不合适.任何帮助将非常感谢.先感谢您!

eip*_*i10 12

要获得每年的单独行,您需要从每个日期中提取年份并将其映射到颜色.要在x轴上获得月份(无年份),您需要从每个日期中提取月份并映射到x轴.

library(zoo)
library(lubridate)
library(ggplot2)
Run Code Online (Sandbox Code Playgroud)

让我们用as.yearmon格式的日期创建一些假数据.我将创建两个单独的数据框,以匹配您在问题中描述的内容:

# Fake data
set.seed(49)
dat1 = data.frame(date = seq(as.Date("2015-01-15"), as.Date("2015-12-15"), "1 month"),
                 value = cumsum(rnorm(12)))
dat1$date = as.yearmon(dat1$date)

dat2 = data.frame(date = seq(as.Date("2016-01-15"), as.Date("2016-12-15"), "1 month"),
                  value = cumsum(rnorm(12)))
dat2$date = as.yearmon(dat2$date)
Run Code Online (Sandbox Code Playgroud)

现在为情节.我们将从中提取的年份和月份dateyearmonth功能,分别从lubridate包.我们还将年份变成一个因子,因此ggplot将使用年份的分类调色板,而不是连续的颜色渐变:

ggplot(rbind(dat1,dat2), aes(month(date, label=TRUE, abbr=TRUE), 
                value, group=factor(year(date)), colour=factor(year(date)))) +
  geom_line() +
  geom_point() +
  labs(x="Month", colour="Year") +
  theme_classic()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述