创建连接开盘价和收盘价的条形图

时间:2015-09-24 19:22:55

标签: r quantmod

我在一本书中看到了一个单色条形图,其中收盘价格与下一天相关。开盘价。有点像这样https://www.trade.education/wp-content/uploads/ohlc-chart-bar-chart.jpg,但开盘价和收盘价连在一起,所以它看起来像一条连续的线。是否有可能在R?我最接近的是barCharttheme='white.mono',但开盘价和收盘价没有关联。

2 个答案:

答案 0 :(得分:1)

您帖子中的链接会显示一个简单的条形图。这是quantmod中的标准显示。

你可能指的是Kagi charts,它们以不同的方式构建。它们代表了具有某些步骤的连续线。这些步骤可能看起来好像一天的收盘价与第二天的开盘价相关,但这种解释是错误的。这不仅仅是一个图形问题,它们是根本不同的图表类型,没有间隙。

我不知道quantmod包中有Kagi图表类型,我建议不要使用它们,除非您确定它们代表数据的方式。

答案 1 :(得分:1)

不完全清楚你想要什么,但这里有一些使用ggplot的可能性。

# grab sample data
library(quantmod)
aapl <- getSymbols("AAPL", from="2015-06-01",auto.assign=FALSE)
names(aapl) <- sub("[^\\.]+\\.","",names(aapl))   # remove `AAPL.` from column names
df <- data.frame(date=index(aapl),aapl)           # ggplot needs a data.frame
# basic OHLC plot    
library(ggplot2)
library(scales)    # for date_format
ggplot(df, aes(x=date))+
  geom_linerange(aes(ymin=Low, ymax=High, color=ifelse(Close>Open,"Gain","Loss")))+
  geom_segment(aes(xend=date-0.3, y=Open,  yend=Open))+
  geom_segment(aes(xend=date+0.3, y=Close, yend=Close))+
  scale_color_manual(guide="none",values=c(Gain="green", Loss="red"))+
  scale_x_date(labels=date_format("%b-%Y"))+
  labs(x="",y="", title="AAPL")+
  theme_bw()

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

# Intraday/Overnight plot
library(reshape2)   # for melt(...)
df.melt <- melt(subset(df,select=c(date,Open,Close)),id="date",value.name="price")
df.melt <- df.melt[order(df.melt$date),]
ggplot(df.melt, aes(x=date, y=price)) + 
  geom_line()+
  scale_x_date(labels=date_format("%b-%Y"))+
  labs(x="",y="", title="AAPL")+
  theme_bw()

# same, color coded
ggplot(df.melt, aes(x=date, y=price)) + 
  geom_line(aes(color=ifelse(c(diff(price),NA)>0,"Gain","Loss"), group=NA))+
  scale_color_manual(guide="none",values=c(Gain="Green", Loss="Red"))+
  scale_x_date(labels=date_format("%b-%Y"))+
  labs(x="",y="", title="AAPL")+
  theme_bw()

编辑:对OP评论的回应。

喜欢这个吗?

df.melt <- melt(subset(df,select=c(date,Open,High,Low,Close)),id="date",value.name="price")
df.melt <- df.melt[order(df.melt$date),]
ggplot(df.melt, aes(x=date, y=price)) + 
  geom_line()+
  scale_x_date(labels=date_format("%b-%Y"))+
  labs(x="",y="", title="AAPL")+
  theme_bw()