r - 基于因子使用不同颜色绘制时间序列

标签 r xts quantmod

我想绘制一条多色的单线,颜色基于因子中的相应值。例如,一个股票日收盘价的时间序列,上涨超过一定数量的天数是蓝色的,下跌很多的天数是红色的,其他天数是无聊的黑色。

我的数据在 xts对象(将因子放在 as.numeric(myfactor) 中),我想使用 quantmod chartSerieschart_Series职能。但如果这是不可能的,那么使用 plot就足够了。

一些示例数据:

library(xts)
x = xts( data.frame( v=(rnorm(50)+10)*10, type=floor(runif(50)*4) ),
  order.by=as.Date("2001-01-01")+1:50)

我可以这样绘制它:
library(quantmod)
chartSeries(x$v)
addTA(x$type, type='p')

看起来像这样:
plot using chartSeries

IE。如果使用彩色线段,我觉得将底部图表中的信息与顶部图表中的信息相匹配会更容易。

最佳答案

所以这是一个 ggplot解决方案。它涉及更多,但提供了更复杂的格式选项。

library(quantmod)
sp500 <- getSymbols("^GSPC", from="2015-01-01", auto.assign=FALSE)
sp500 <- Cl(sp500)                         # extract close
sp500 <- merge(sp500, dailyReturn(sp500))  # add daily returns
sp500 <- merge(lag(Cl(sp500),1), sp500)    # merge with close lagged by 1 day

names(sp500) <- c("ymin", "ymax", "return")
library(ggplot2)
library(scales)
df <- with(sp500,
           data.frame(xmin=c(lag(index(sp500),1)),
                      xmax=index(sp500), 
                      ymin, ymax, return))
df$status <- with(df,ifelse(return>0.01,"up",ifelse(return< -0.01,"down","neutral")))
ggplot(df) + 
  geom_segment(aes(x=xmin, xend=xmax, y=ymin, yend=ymax, color=status)) +
  scale_color_manual(values=c(up="green", down="red", neutral="grey50"), 
                     breaks=c("up","down"),
                     labels=c("Gain > 1%", "Loss > 1%")) +
  scale_x_date(breaks=date_breaks("months"), labels=date_format("%b"))+
  labs(x=NULL, y="Closing Price", title="S&P 500") +
  theme(panel.background =element_rect(fill="black"),
        panel.grid = element_blank())



与其他答案一样,基本思想是根据增益/损失的大小绘制颜色编码的段。因此,我们首先提取收盘价,添加一列返回,然后添加另一列滞后 1 天的收盘价。然后我们从中创建一个带有两列日期的 data.frame,也滞后 1 天。然后我们添加一列 ( status ) 来指示 yield /损失是否 > 1%。然后我们用这个来驱动geom_segment(...) , 颜色编码 status .在 scale_color_manual(...)调用,我们将颜色设置为红色和绿色,并从图例中排除中性色。其余的都是格式化。

关于r - 基于因子使用不同颜色绘制时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32289849/

相关文章:

r - 查找不同变量中出现的次数

r - 如何使用 R 中的 quantmod 包在收盘前下载开盘价?

mysql - 使用 RMySQL、R 和 MySQL 连接到数据库

r - 从 `zoo` 到 `xts` 的转换会在索引中创建大量 NA

r - 在嵌套数据框中使用 `map()`

r - 将数据从 csv 文件转换为 "xts"对象

R:在一个命令中将 getSymbols() 的输出转换为数据帧,而无需显式调用对象名称

r - quantmod 货币 (FX) 数据的准确时间戳

r - 使用季度日期格式缩放 x 轴

r - 在R中查看包中的所有内容(不仅仅是对象)