首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R ggplot2 autoplot()函数。怎么了?

R ggplot2 autoplot()函数。怎么了?
EN

Stack Overflow用户
提问于 2017-12-17 10:08:22
回答 2查看 3K关注 0票数 3

我有一个包含2285个观察值的数据集"bc“,其中有两个变量:"Date”和"Price“。

代码语言:javascript
复制
 'data.frame':  2285 obs. of  2 variables:
  $ Date : Date, format: "2017-12-14" "2017-12-13" ...
  $ Price: num  16234 16250 16650 16470 14691 ...

我尝试创建一个时间序列对象,如下所示:

代码语言:javascript
复制
  tsbc <- ts(bc)

然后,我使用:

代码语言:javascript
复制
  autoplot(tsbc)

我得到了下面的图:

然而,情节并不是它应该是的样子。你能告诉我为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-12-17 19:50:07

这是一个基于xts的解决方案

代码语言:javascript
复制
library(ggplot2)

# Generate a dataset
set.seed(1)
bc <- data.frame(Date=seq(as.Date("2016/1/1"), as.Date("2017/12/14"), "days"),
                 Price= cumsum(rnorm(714)))
#   'data.frame':   714 obs. of  2 variables:
# $ Date : Date, format: "2016-01-01" "2016-01-02" ...
# $ Price: num  -0.626 -0.443 -1.278 0.317 0.646 ...

library(xts)
tsbc <- xts(bc$Price, order.by=bc$Date)
autoplot(tsbc)

否则,使用ts

代码语言:javascript
复制
tsbc <- ts(bc$Price, start=c(2016,1), frequency=365)
autoplot(tsbc) + scale_x_yearmon(n=5)

票数 2
EN

Stack Overflow用户

发布于 2017-12-17 20:36:34

问题在于您是如何创建时间序列对象tsbc的。实际上,您正在创建两个时间序列。由于日期只是带有类属性的底层数字,因此当您调用ts时,它们会丢失其属性。这就是为什么autoplot也为Date画了一条线,它绘制了表示各自日期的双精度值(有关更多详细信息,请参阅?base::Dates )。这显然不是你想要的。有关如何构造ts对象的信息,请参阅@Marco的答案。

但是,您甚至不需要这样做。为什么不简单地

代码语言:javascript
复制
library(ggplot2)
ggplot(bc, aes(Date, Price)) + geom_line() 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47851639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档