所以这里是一个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
)来表示收益/损失是否> 1%。然后我们用它来驱动geom_segment(...)
,颜色编码status
。在scale_color_manual(...)
调用中,我们将颜色设置为红色和绿色,并从图例中排除中性色。其余的都是格式化。
你应该发布一些数据。我猜你不希望大多数人会称之为“行”,而是想要着色“段”。 –
@BondedDust我已经添加了一些测试数据。 'segments'可能是我想要的,尽管它看起来很低级别(不支持x轴上的时间戳?) –