我想使用ggplot2绘制一个xts对象但是收到错误。这就是我正在做的事情:
dates <- c("2014-10-01", "2014-11-01", "2014-12-01", "2015-01-01", "2015-02-01")
value <- as.numeric(c(3, 4, 5, 6, 5))
new_df <- data_frame(dates, value)
new_df$dates <- as.Date(dates)
new_df <- as.xts(new_df[,-1], order.by = new_df$dates)
现在我尝试使用ggplot2绘制它:
ggplot(new_df, aes(x = index, y = value)) + geom_point()
我收到以下错误:
错误(函数(...,row.names = NULL,check.rows = FALSE, check.names = TRUE,:参数意味着行数不同:0, 5
我不太确定我做错了什么。
答案 0 :(得分:6)
更改小写&#39;索引&#39;大写&#39;索引&#39;
ggplot(new_df, aes(x = Index, y = value)) + geom_point()
答案 1 :(得分:5)
动物园中的autoplot.zoo
方法(动物园由xts自动拉入)将使用ggplot2为xts对象创建绘图。它支持ggplot2的+ ...如果你需要额外的geoms。见?autoplot.zoo
library(xts)
library(ggplot2)
x_xts <- xts(1:4, as.Date("2000-01-01") + 1:4) # test data
autoplot(x_xts, geom = "point")
zoo还有fortify.zoo
,它会将zoo或xts对象转换为data.frame:
fortify(x_xts)
,并提供:
Index x_xts
1 2000-01-02 1
2 2000-01-03 2
3 2000-01-04 3
4 2000-01-05 4
fortify
泛型位于ggplot2中,因此如果您没有加载ggplot2,请直接使用fortify.zoo(x_xts)
。
有关详细信息,请参阅?fortify.zoo
。
答案 2 :(得分:0)
您需要使用xts
对象吗?
您可以在不使用xts
的情况下绘制日期/时间。以下是使用您在上面提供的内容的示例。您可以根据需要格式化它。
dates <- c("2014-10-01", "2014-11-01", "2014-12-01", "2015-01-01", "2015-02-01")
value <- as.numeric(c(3, 4, 5, 6, 5))
new_df <- data.frame(dates, value)
new_df$dates <- as.Date(dates)
require(scales)
ggplot(new_df, aes(x = dates, y = value)) + geom_point() +
scale_x_date(labels = date_format("%Y-%m-%d"), breaks = date_breaks("1 month")) +
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
ggsave("time_plot.png", height = 4, width = 4)