所以這裏是一個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軸上的時間戳?) –