Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R ggplot:在同一地块上按月计算多年_R_Plot_Ggplot2 - Fatal编程技术网

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

R ggplot:在同一地块上按月计算多年,r,plot,ggplot2,R,Plot,Ggplot2,所以,我碰到了一些我不认为我遇到过的事情。我搜索了谷歌寻找答案,但还没有找到任何答案 我有两个数据集——一个是2015年的,一个是2016年的。它们代表了IT系统的可用性。数据帧的读取方式如下: 2015年数据集: variable value Jan 2015 100 Feb 2015 99.95 ... ... variable value Jan 2016 99.99 Feb 2016 99.90 ... ... 2015年数据集: variable value J

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

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

2015年数据集:

variable value
Jan 2015 100
Feb 2015 99.95
...      ...
variable value
Jan 2016 99.99
Feb 2016 99.90
...      ...
2015年数据集:

variable value
Jan 2015 100
Feb 2015 99.95
...      ...
variable value
Jan 2016 99.99
Feb 2016 99.90
...      ...
他们只是从1月到12月列出系统的可用性。“variable”列是一个
as.yearmon
数据类型,其值是一个简单的数字

我想创建一个带有ggplot2的
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)
让我们创建一些日期为.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)
现在来看情节。我们将使用
year
month
函数分别从
lubridate
包中提取
date
中的年和月。我们还将把年份转换为一个因子,这样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()

您需要一个具有年份列的长格式数据集。然后您可以使用
ggplot


ggplot(数据集,aes(x=月,y=值,颜色=年))+geom_line()
gg季节图
来自
forecast
的软件包可以为您做到这一点。带有
ts
对象的示例代码:

ggseasonplot(a10, year.labels=TRUE, year.labels.left=TRUE) +
  ylab("$ million") +
  ggtitle("Seasonal plot: antidiabetic drug sales")


太棒了!这正是我想要的。第二个答案也让我明白了这一点,但我希望数据帧只保留为2列。我认为这种方法有点优雅。然而,由于我只能投一票赞成,这是第一个进来的,所以它赢了。谢谢你的建议!回答也很好。这也让我达到了目的,但正如我前面提到的,我希望保留一个2列数据帧。