R:让 quantmod 的 chartSeries 和 AddTA 不显示最后一个值
R: Get quantmod's chartSeries and AddTA to not show last value
使用 chartSeries 时,默认情况下它还会在绘图的左上角显示最后一个值。有什么办法可以阻止它吗?
使用 addTA 添加新 TA 时,您可以通过设置参数 legend = "" 来避免绘图上的最后一个值,但前提是您要为 TA 创建新绘图。如果 TA 在先前绘制的图形上,无论您在图例参数中输入什么,它都会显示最后一个值。
getSymbols ("AAPL", src = "google")
chartSeries(AAPL)
我可以在这里使用什么来防止它在绘图上打印最后一个值?
addTA(EMA(Cl(AAPL)), on = 1, legend = "")
这仍然在绘图的左上角打印最后一个值。奇怪的是,如果您正在绘制这样的新图,它不会这样做:
addTA(EMA(Cl(AAPL)), legend = "")
默认情况下是这样的,还是我可以做些什么来解决这个问题?
默认显示最后一个值(是的,很烦人)。您可能必须修改源代码以删除 addTA
.
中显示的最后一个数字
我不使用addTA
,而是add_TA
和chart_Series
,因为我认为它们看起来更好(quantmod
的第二代图表)。这是一个解决方案,可以从 add_TA
版本的显示中删除最后一个数字。但是你必须愿意修改源代码。
在 add_TA 中,您需要修改源代码的大约第 56-60 行:
替换text.exp
,就是这个:
# this is inside add_TA:
if (is.na(on)) {
plot_object$add_frame(ylim = c(0, 1), asp = 0.15)
plot_object$next_frame()
text.exp <- expression(text(x = c(1, 1 + strwidth(name)),
y = 0.3, labels = c(name, round(last(xdata[xsubset]),
5)), col = c(1, col), adj = c(0, 0), cex = 0.9,
offset = 0, pos = 4))
plot_object$add(text.exp, env = c(lenv, plot_object$Env),
进行了这些修改:
if (is.na(on)) {
plot_object$add_frame(ylim = c(0, 1), asp = 0.15)
plot_object$next_frame()
text.exp <- expression(text(x = c(strwidth(name)), # <- affects label on the subchart
y = 0.3, labels = name, col = c(col), adj = c(0), cex = 0.9,
offset = 1, pos = 4))
plot_object$add(text.exp, env = c(lenv, plot_object$Env),
expr = TRUE)
...
并将此修改后的代码分配给一个新变量,称为 add_TA.mine
:
add_TA.mine <- function (x, order = NULL, on = NA, legend = "auto", yaxis = list(NULL,
NULL), col = 1, taType = NULL, ...)
{
lenv <- new.env()
lenv$name <- deparse(substitute(x))
lenv$plot_ta <- function(x, ta, on, taType, col = col, ...) {
xdata <- x$Env$xdata
....
[all the code for the rest of the function with modifications]....
}
}
plot_object
}
现在,只需运行修改函数的代码
library(quantmod)
getSymbols("AAPL")
environment(add_TA.mine) <- environment(get("add_TA", envir = asNamespace("quantmod")))
assignInNamespace(x = "add_TA", value = add_TA.mine, ns = "quantmod")
chart_Series(AAPL, subset = "2017")
add_TA(RSI(Cl(AAPL)))
quantmod:::add_TA(RSI(Cl(AAPL)))
可以看到最后一个值不再打印:
(您可以在旧的 addTA
代码中进行相同类型的更改(如果您真的想坚持旧的情节,可以通过 chartSeries
)
如果您对更改感到满意,并希望在 add_TA
中永久保留它们,您可以根据自己的修改重新编译 quantmod
源代码(即您需要下载 quantmod源代码并重新编译包)。如果你把事情弄得一团糟,你可以随时重新下载原始 quandmod
源代码。
使用 chartSeries 时,默认情况下它还会在绘图的左上角显示最后一个值。有什么办法可以阻止它吗?
使用 addTA 添加新 TA 时,您可以通过设置参数 legend = "" 来避免绘图上的最后一个值,但前提是您要为 TA 创建新绘图。如果 TA 在先前绘制的图形上,无论您在图例参数中输入什么,它都会显示最后一个值。
getSymbols ("AAPL", src = "google")
chartSeries(AAPL)
我可以在这里使用什么来防止它在绘图上打印最后一个值?
addTA(EMA(Cl(AAPL)), on = 1, legend = "")
这仍然在绘图的左上角打印最后一个值。奇怪的是,如果您正在绘制这样的新图,它不会这样做:
addTA(EMA(Cl(AAPL)), legend = "")
默认情况下是这样的,还是我可以做些什么来解决这个问题?
默认显示最后一个值(是的,很烦人)。您可能必须修改源代码以删除 addTA
.
我不使用addTA
,而是add_TA
和chart_Series
,因为我认为它们看起来更好(quantmod
的第二代图表)。这是一个解决方案,可以从 add_TA
版本的显示中删除最后一个数字。但是你必须愿意修改源代码。
在 add_TA 中,您需要修改源代码的大约第 56-60 行:
替换text.exp
,就是这个:
# this is inside add_TA:
if (is.na(on)) {
plot_object$add_frame(ylim = c(0, 1), asp = 0.15)
plot_object$next_frame()
text.exp <- expression(text(x = c(1, 1 + strwidth(name)),
y = 0.3, labels = c(name, round(last(xdata[xsubset]),
5)), col = c(1, col), adj = c(0, 0), cex = 0.9,
offset = 0, pos = 4))
plot_object$add(text.exp, env = c(lenv, plot_object$Env),
进行了这些修改:
if (is.na(on)) {
plot_object$add_frame(ylim = c(0, 1), asp = 0.15)
plot_object$next_frame()
text.exp <- expression(text(x = c(strwidth(name)), # <- affects label on the subchart
y = 0.3, labels = name, col = c(col), adj = c(0), cex = 0.9,
offset = 1, pos = 4))
plot_object$add(text.exp, env = c(lenv, plot_object$Env),
expr = TRUE)
...
并将此修改后的代码分配给一个新变量,称为 add_TA.mine
:
add_TA.mine <- function (x, order = NULL, on = NA, legend = "auto", yaxis = list(NULL,
NULL), col = 1, taType = NULL, ...)
{
lenv <- new.env()
lenv$name <- deparse(substitute(x))
lenv$plot_ta <- function(x, ta, on, taType, col = col, ...) {
xdata <- x$Env$xdata
....
[all the code for the rest of the function with modifications]....
}
}
plot_object
}
现在,只需运行修改函数的代码
library(quantmod)
getSymbols("AAPL")
environment(add_TA.mine) <- environment(get("add_TA", envir = asNamespace("quantmod")))
assignInNamespace(x = "add_TA", value = add_TA.mine, ns = "quantmod")
chart_Series(AAPL, subset = "2017")
add_TA(RSI(Cl(AAPL)))
quantmod:::add_TA(RSI(Cl(AAPL)))
可以看到最后一个值不再打印:
(您可以在旧的 addTA
代码中进行相同类型的更改(如果您真的想坚持旧的情节,可以通过 chartSeries
)
如果您对更改感到满意,并希望在 add_TA
中永久保留它们,您可以根据自己的修改重新编译 quantmod
源代码(即您需要下载 quantmod源代码并重新编译包)。如果你把事情弄得一团糟,你可以随时重新下载原始 quandmod
源代码。