0

我在对齐字幕时遇到问题chart_Series。目前它只是写在 x 轴的顶部。也可以关闭自动写在 chart_Series图表顶部的文本,以便我可以用我自己的替换它

  library(quantmod)
  getSymbols("SPY", from="2013-01-01", to=Sys.Date())
  chart_Series(SPY)


  title("S&P Index", sub = "text1\n\text2\ntext3",
  cex.main = 2,   font.main= 4, col.main= "blue",
  cex.sub = 0.75, font.sub = 3, col.sub = "red")

我会很感激你的帮助。

4

2 回答 2

3

'quantmod' 图形是面向对象的。数据存储在另一个环境中的环境(命名为“Env”)中(命名为您命名的任何名称,在本例中为“cspy”)。特殊的图表功能与数据一起存储在“原型”对象中。它是一种比在 R 中更常见的 S3 或 S4 编程范式中使用的更面向对象的方法。有关更多详细信息,应查阅“proto”包。在浏览了其中的代码chartSeries及其创建的对象之后,我可以得到顶部的标签以消除此问题:

cspy <- chart_Series(SPY, name = NULL)
cspy$Env$actions[[4]] <- NULL
cspy

'quantmod' 代码有:

    cs$Env$name <- name
    text.exp <- c(expression(text(1 - 1/3, 0.5, name, font = 2, 
        col = "#444444", offset = 0, cex = 1.1, pos = 4)), 
                  expression(text(NROW(xdata[xsubset]), 
        0.5, paste(start(xdata[xsubset]), end(xdata[xsubset]), 
            sep = " / "), col = 1, adj = c(0, 0), pos = 2)))
    cs$add(text.exp, env = cs$Env, expr = TRUE)

...但我无法找出那片叶子的名字,所以我看了看:

cspy$Env$actions

...并看到名称和日期范围在第 4 项中。所以我只是删除了它。(仅去掉名称是微不足道的:chart_Series(SPY, name = NULL)。(我不知道该图形项在对象中的位置是否一致,并且我没有看到访问该对象叶的方法,所以这可能是不稳定的黑客攻击。)

为边距文本(字幕)腾出空间:

 png("out.png")
 myoma <- par("oma")
 myoma[1] <- 3
 par("oma" =myoma)
 cspy
 title("S&P Index",  cex.main = 2,  font.main= 4, col.main= "blue")
   mtext(text= "text1\ntext2\ntext3", side=1, cex = 0.75, font = 3, col = "red",line=7)
 dev.off()

在此处输入图像描述

于 2013-10-02T20:40:37.540 回答
1

我对chart_Series以前的情节不熟悉。通常我会使用绘图参数mar来增加绘图底部的边距,以便为副标题腾出更多空间。但是,我并没有设法以这种方式增加利润。相反,我不得不使用oma, 来增加情节的外边距。我使用添加了字幕mtext,而不是使用中的sub参数title。您使用 设置与绘图的距离line。默认chart_Series标题通过设置关闭name = NULL。另请注意?chart_Series:“高度实验性(阅读:alpha)谨慎使用。”中的“注意”。反正,

par(oma = c(5, 0, 0, 0))
chart_Series(SPY, name = NULL)

title("S&P Index", cex.main = 2, font.main = 4, col.main = "blue")

mtext(text = "text1\n\text2\ntext3",
      side = 1, line = 9, cex = 0.75, font = 3, col = "red")

在此处输入图像描述

于 2013-10-02T20:31:43.133 回答