PerformanceAnalytics
PerformanceAnalytics copied to clipboard
"ylog" is ignored in chart.CumReturns
I recently updated packages on my R installation and noticed that plots using a log-scale for the y-axis were no longer displaying correctly. Digging in, it looks like the "ylog" parameter for chart.CumReturns is now being ignored.
If I'm reading the code correctly, chart.CumReturns() calls chart.TimeSeries(), which calls chart.TimeSeries.base(), which has recently(?) been modified to call plot.xts(). However, looking at this commit: https://github.com/braverock/PerformanceAnalytics/commit/7f6665150628bd0baf79fbf5e1c518ec70e1ea9e
...it appears that since that modification there is now nothing done with the ylog parameter.
Basic example code:
test <- xts(rep(0.01,1000),seq.Date(from=as.Date("2000-01-01"),to=as.Date("2002-09-26"),by=1))
chart.CumReturns(test,ylog=TRUE)
This plot should show a straight line, but now shows an exponential curve.
I am running R 3.4.4 and PerformanceAnalytics 1.5.2 on Antergos (Arch) Linux 64-bit. If you need any more details about my configuration let me know. Thanks!
This may be related to this issue: https://github.com/braverock/PerformanceAnalytics/issues/1
... feel free to move things around if needed for cleanliness.
For now, I've downgraded to 1.4.3541 using the instructions here: https://support.rstudio.com/hc/en-us/articles/219949047-Installing-older-versions-of-packages
Still an issue.
logaxis = "y" shouldn't that variable passed into plot ?
https://github.com/braverock/PerformanceAnalytics/blob/master/R/chart.TimeSeries.builtin.R#L73
Any plans to fix this? Really need a log chart here.
This is likely dependent on https://github.com/joshuaulrich/xts/issues/103 being implemented.
xts 0.13.2 is now out, but doesn't seem to fix this issue, perhaps @joshuaulrich can find an easy-ish fix for this now? I wouldn't say ylog parameter is "ignored" per se, but certainly doesn't produce a real log scale, and adding wealth.index=TRUE (to get rid of the 0 on the y-axis) doesn't help.
Thanks for giving this a try @babbage9010!
I just verified this works with the development version of the PerformanceAnalytics package if you set log = TRUE and wealth.index = TRUE. You need the development version for this to work, specifically this change.
Here's the linear scale plot from chart.CumReturns() as part of charts.PerformanceSummary().
library(PerformanceAnalytics)
data(edhec)
### linear scale
charts.PerformanceSummary(edhec)
And here's the log scale plot. Note that the legend doesn't appear on the log-scale plot due to this bug in addLegend().
### log scale
charts.PerformanceSummary(edhec, log = TRUE, wealth.index = TRUE)
So, to fix this issue, we need to send log = TRUE to plot.xts() when ylog = TRUE in chart.TimeSeries(). I would have to think about and test the best way to go about that.
We also need to handle the case when wealth.index = FALSE and there are negative values in the cumulative return series, since the log of negative numbers isn't defined.