所以,我碰到了一些我认为不会遇到的东西。我搜索谷歌寻找答案,但还没找到任何东西(还)......
我有两个数据集 - 一个用于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
数据类型,值是简单数字。
我想创建一个带有ggplot2的geom_line()
图表,它基本上将百分比作为y轴,将月份作为x轴。我已经能够做到这一点,有两条线,但x轴从2015年1月到2016年12月。我想要的是让它们只按月绘制,所以它们重叠。我已经用尺度等尝试了各种各样的东西,但我还没弄清楚如何做到这一点。
基本上,我需要按照时间顺序读取1月到12月的x轴,但我想在同一张图表上绘制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()
,则它们不合适。任何帮助将非常感谢。提前谢谢!
答案 0 :(得分:12)
要获得每年的单独行,您需要从每个日期中提取年份并将其映射为颜色。要在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)
现在为情节。我们将分别从date
包中year
和month
函数中提取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()
答案 1 :(得分:1)
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()
答案 2 :(得分:1)
ggseasonplot
包中的 forecast
可以为您做到这一点。带有ts
对象的示例代码:
ggseasonplot(a10, year.labels=TRUE, year.labels.left=TRUE) +
ylab("$ million") +
ggtitle("Seasonal plot: antidiabetic drug sales")