R quantmod chartSeries:标题和字幕对齐

时间:2013-10-02 18:44:16

标签: r quantmod

我在chart_Series中调整字幕时出现问题。 目前它只是写在x轴的顶部。 也可以关闭自动写在a顶部的文本 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")

我很感激你的帮助。

2 个答案:

答案 0 :(得分:3)

' quantmod'图形是面向对象的。数据存储在另一个环境(命名为您命名的任何环境,在这种情况下为cspy')中的环境(名为“Env'”)中。特殊图表功能与数据一起存储在“原型”对象中。这是一种比在S3中更常见的S3或S4编程范例中使用的面向对象的方法。有关详细信息,应参考原始' -package。在找到chartSeries中的代码及其创建的对象后,我可以在顶部获取标签以消除此问题:

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

&#39; quantmod&#39;代码有这个:

    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)。(我不知道对象中该图形项的位置是否一致,我没有看到访问该对象的方法-leaf,所以这可能是一个不稳定的黑客。)

为边距文本(副标题)腾出空间:

 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()

enter image description here

答案 1 :(得分: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")

enter image description here