2013-10-02 4 views
0

У меня возникают проблемы с выравниванием моего субтитра в chart_Series. В настоящее время он просто пишет поверх оси x. Также возможно выключить текст, который автоматически записывается в верхней части chart_Series график, так что я могу заменить его с моим собственнымR quantmod 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") 

Я был бы признателен за вашу помощь.

ответ

3

Графической '' quantmod являются объектно-ориентированными. Данные хранятся в среде (с именем «Env») внутри другой среды (названной так, как вы ее называете, «cspy» в этом случае). Специальные функции диаграмм сохраняются вместе с данными в «прото-объекте». Это более объектно-ориентированный подход, чем используется в парадигмах программирования S3 или S4, которые гораздо чаще встречаются в R. Для более подробной информации следует проконсультироваться с «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() 

enter image description here

+0

большое спасибо за вашу помощь. –

1

Я не знаком с chart_Series участком ранее. Обычно я использовал параметр построения mar для увеличения поля в нижней части графика, чтобы сделать еще больше места для подзаголовка. Однако мне не удалось увеличить маржу таким образом. Вместо этого мне пришлось использовать oma, чтобы увеличить внешние поля графика. Я добавил субтитры, используя mtext, вместо использования аргумента sub в title. Вы устанавливаете расстояние от участка с line. По умолчанию chart_Series заголовок выключен установкой name = NULL. Также обратите внимание на примечание «?chart_Series»: «Очень экспериментально (читайте: альфа) используйте с осторожностью». Во всяком случае,

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

+0

большое спасибо за вашу помощь –

Смежные вопросы