我正在尝试绘制时间序列。在一个数据帧(y)中,我在列向量中有56个项目,而我有第二个具有相应日期的数据帧(日期)。我试图将时间序列绘制为y轴上的y值和x轴上的日期值。我已经尝试过使用ggplt2 geom_freqpoly的一些东西,但我无法弄明白。我对ggplot以外的其他方法持开放态度,我可以将日期和y绑定到一个日期框架中,如果它会使事情变得更容易。
有什么建议吗?
//maps.googleapis.com/maps/api/js...
答案 0 :(得分:4)
以下是来自几个不同包的方法。
<强> GGPLOT2 强>
ggplot2包在数据框上效果最佳,因此我建议您使用数据创建数据框。另外,不确定为什么要使用geom_freqpoly
。我认为geom_line
适用于时间序列数据。
library(ggplot2)
set.seed(123)
N<- 500
M<-56
x<- matrix( rnorm(N*M,mean=23,sd=3), N, M)
y <- colMeans(x,dim=1)
Date <- seq(as.Date("2018-01-01"), as.Date("2018-02-25"), by="days")
Date <- as.POSIXct(Date, format = "%Y-%m-%d %H:%M")
dat <- data.frame(Date = Date, y = y)
ggplot(dat, aes(x = Date, y = y)) +
geom_line() +
theme_classic()
<强> ggpubr 强>
ggpubr是ggplot2包的扩展。我们可以使用ggline
包来绘制数据。
library(ggpubr)
ggline(data = dat, x = "Date", y = "y")
<强>晶格强>
我们还可以使用lattice包中的xyplot
函数。
library(lattice)
xyplot(y ~ Date, data = dat, type = "l")
<强> ggvis 强>
library(ggvis)
ggvis(dat, ~Date, ~y) %>% layer_lines()
基础R
我们也可以使用基础R。
plot(dat$Date, dat$y, xaxt = "n", type = "l", xlab = "Date", ylab = "y")
axis.POSIXct(1, at = seq(min(dat$Date), max(dat$Date), by = "week"), format="%b %d")
<强> XTS 强>
我们还可以将数据框转换为xts对象,然后绘制它。
library(xts)
dat.ts <- xts(dat$y, order.by = dat$Date)
plot(dat.ts)
<强> PerformanceAnalytics 强>
我们还可以使用performanceanalytics包中的chart.TimeSeries
来绘制xts
包。
chart.TimeSeries(dat.ts)
<强> dygraphs 强>
dygraphs包可以创建交互式时间序列图。
library(dygraphs)
dygraph(dat.ts)
<强> plotly 强>
我们也可以使用plotly创建交互式情节。
library(plotly)
plot_ly(x = ~dat$Date, y = ~dat$y, mode = 'lines')
我们还可以使用highcharter包来创建交互式情节。
library(highcharter)
hchart(dat.ts)