离散值转换为连续比例尺

3
早上好,同事们!我现在尝试使用R中的ggplot包构建图表——日本蜡烛图,但该代码无法运行。错误信息如下:

连续比例尺中提供了离散值。

我认为数据在ggplot中没有显示为数字,但如果我在代码中更改as.vector --> as.numeric,问题并未消失。你能告诉我我做错了什么吗?谢谢。
library("dplyr")
library("ggplot2")
library("quantmod")
getSymbols('AAPL')
x<-AAPL
head(x)

start=as.Date("2017-01-01")
end=as.Date("2017-09-01")
candle <- function(x, start, end){
date <- as.Date(time(x))
  open <- as.vector(Op(x))
  high <- as.vector(Hi(x))
  low <- as.vector(Lo(x))
  close <- as.vector(Cl(x))
xSubset <-data.frame('date'=date,'open'=open,'high'= high,'low'=low,'close'=close)
xSubset$candleLower <- pmin(xSubset$open, xSubset$close)
  xSubset$candleMiddle <- NA
  xSubset$candleUpper <- pmax(xSubset$open, xSubset$close)
  xSubset$fill <- ''
  xSubset$fill[xSubset$open < xSubset$close] = 'white'
  xSubset$fill[xSubset$fill ==''] = 'red'
 xSubset$ma200 <- SMA(xSubset$close, 200)
  xSubset$ma50 <- SMA(xSubset$close, 50)
xSubset <-subset(xSubset, xSubset$date > start & xSubset$date < end)
 g <- ggplot(xSubset, aes(x=date, lower=candleLower, middle=candleMiddle, upper=candleUpper, ymin=low, ymax=high)) 
  g <- g + geom_boxplot(stat='identity', aes(group=date, fill=fill))
  g <- g + geom_line(aes(x=date, y=ma50))+ geom_line(aes(x=date, y=ma200))
  g 
}

candle(AAPL, start, end)
2个回答

0
你的问题出在提供给“middle”的NA上。它需要是一个连续的值。我将其更改为与candleUppercandleLower相同长度的0,错误消失了。
这有帮助吗?

但现在出现了第二个问题:图表中蜡烛的值高于100 y.e.(在y轴上),我想限制这个图表,并显示以50或100开始的刻度(而不是0)。我尝试在ggplot(ylim=c(50,150))中添加,但对所得到的图表没有任何影响。 - Ruslan Sayakhov
你能更新你的新代码,或者提出一个新问题吗? - Josh Rumbut
@RuslanSayakhov 试试 g <- g + coord_cartesian(ylim = c(50, 150)) - Z.Lin

0

你尝试过使用 g + scale_y_continuous(limits = c(50, max(data))) 来改变 y 轴的限制吗?那应该可以解决问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接