在boxplot x轴上绘制离散日期

时间:2018-02-13 22:02:45

标签: r ggplot2

我正在尝试使用ggplot2对财务数据进行蜡烛图。

我使用rgdax库来检索加密货币数据。

require(ggplot2)
require(rgdax)
require(quantmod)

candles <- public_candles(product_id = "ETH-EUR")
candles$candleLower <- pmin(candles$open, candles$close)
candles$candleMiddle <- NA
candles$candleUpper <- pmax(candles$open, candles$close)
candles$fill <- ''
candles$fill[candles$open < candles$close] = 'green'
candles$fill[candles$fill ==''] = 'red'

#Add Moving Averages
candles$ma200 <- SMA(candles$close, 200)
candles$ma50 <- SMA(candles$close, 50)

#Graphing Step
g <- ggplot(candles, aes(x=time, lower=candleLower, middle=candleMiddle, upper=candleUpper, ymin=low, ymax=high))
g <- g + geom_boxplot(stat='identity', aes(group=time, fill=fill))
g <- g + geom_line(aes(x=time, y=ma50))+ geom_line(aes(x=time, y=ma200))
g <- g + scale_x_datetime()
g

我遇到的问题是日期是连续的,我希望它们是离散的。因此错误消息:

  

提供给连续刻度的离散值

我还希望保留全部时间,包括小时,分钟和秒。

我尝试使用scale_x_date从zoo包中使用as.Date,但我有同样的错误。

以下是数据框的摘录:

> candles
                   time    low   high   open  close      volume
281 2018-02-13 16:40:00 684.55 684.55 684.55 684.55  0.14481784
280 2018-02-13 16:41:00 684.55 684.55 684.55 684.55  0.04325781
279 2018-02-13 16:43:00 683.99 684.55 684.55 683.99  0.60137169
278 2018-02-13 16:44:00 683.98 684.00 684.00 683.98  0.43150033
277 2018-02-13 16:46:00 682.72 683.90 683.90 682.72  1.73803500
276 2018-02-13 16:47:00 682.51 682.51 682.51 682.51  0.01398156
275 2018-02-13 16:49:00 682.51 682.51 682.51 682.51  0.28122771
274 2018-02-13 16:50:00 683.00 683.58 683.58 683.00  1.52767648
273 2018-02-13 16:51:00 682.99 683.00 682.99 683.00  0.29247699
272 2018-02-13 16:52:00 683.00 683.00 683.00 683.00  0.02190716
271 2018-02-13 16:54:00 683.00 683.58 683.00 683.58  0.50166543
270 2018-02-13 16:56:00 683.58 683.61 683.58 683.61 11.81034652
269 2018-02-13 16:58:00 683.98 683.99 683.99 683.98  0.44021340
268 2018-02-13 17:01:00 684.17 684.23 684.17 684.22  0.53595431
267 2018-02-13 17:02:00 684.37 684.37 684.37 684.37  0.48513463
266 2018-02-13 17:03:00 684.43 684.43 684.43 684.43  0.05492116
265 2018-02-13 17:05:00 684.43 684.43 684.43 684.43  0.11513667
264 2018-02-13 17:06:00 684.42 684.42 684.42 684.42  1.12376641
263 2018-02-13 17:07:00 684.43 684.43 684.43 684.43  0.57568335
262 2018-02-13 17:08:00 684.42 684.43 684.42 684.43  0.34713259
261 2018-02-13 17:09:00 684.42 684.42 684.42 684.42  9.89238437
260 2018-02-13 17:10:00 684.43 684.43 684.43 684.43  0.07287131
259 2018-02-13 17:11:00 684.43 684.48 684.43 684.48  1.19321749
258 2018-02-13 17:12:00 684.47 684.48 684.47 684.47  0.22166553
257 2018-02-13 17:13:00 684.21 684.47 684.47 684.21  0.06647252

这是预期的输出:

enter image description here

1 个答案:

答案 0 :(得分:1)

对代码进行了一些更改:<script> $(function() { $('#calendar').fullCalendar({ schedulerLicenseKey: 'GPL-My-Project-Is-Open-Source', now: '{!calCurrentDate}', minTime: '08:30', maxTime: '17:00', slotLabelInterval: '03:30:00', slotDuration: '03:30:00', snapDuration: '03:30:00', slotLabelFormat: ['dddd MMM DD, YYYY','h(:mm)a'], slotWidth: '75', editable: true, // enable draggable events businessHours: false, aspectRatio: 2.75, scrollTime: '08:00', // undo default 6am scrollTime 要求中间值不是geom_boxplot,所以我将其设置为打开和关闭的平均值,但它可以设置为任何其他值而不是比NA。然后,我还将日期转换为NA以供POSIXct使用,并添加了一些格式,以便更好地显示标签。

有了这些改变,我认为它现在有效,我希望它有用。

scale_x_datetime

SCREENSHOT