ggplot:按月在同一地块上多年

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

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

2015数据集:

variable value
Jan 2015 100
Feb 2015 99.95
...      ...

2015数据集:

variable value
Jan 2016 99.99
Feb 2016 99.90
...      ...

他们只是从1月至12月列出系统的可用性。 “变量”列是一个as.yearmon数据类型,其值是一个简单的数字。

我想用geom_line()创建一个geom_line()图表,其基本上将百分比作为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()

这是因为我正在处理一个yearmon()数据类型而连续不断地绘制。 我尝试过这样的事情:

ggplot(data2015,aes(months(variable),value)) +
geom_line(aes(color="2015")) +
geom_line(data=data2016,aes(color="2016")) +
theme_classic()

显然这是行不通的。 我认为这months()可能还会以某种方式持续这一年。 如果我把它们作为factors()他们就不是有序的。 任何帮助将非常感激。 先谢谢你!


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

library(zoo)
library(lubridate)
library(ggplot2)

我们用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)

现在的情节。 我们将提取的年份和月份从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()

在这里输入图像描述


month value year
Jan 99.99 2015
Feb 99.90 2015
Jan 100 2016
Feb 99.95 2016

您需要一个具有年份列的longform数据集。 然后你可以用ggplot绘制两条线

ggplot(dataset, aes(x = month, y = value, color = year)) + geom_line()

链接地址: http://www.djcxy.com/p/30893.html

上一篇: ggplot: Multiple years on same plot by month

下一篇: Change loadings (arrows) length in PCA plot using ggplot2/ggfortify?