2014-04-12 27 views
5

'de Chartseries kullanarak kesiliyor chartSeries kullanıyorum ve Y ekseni kesiliyor. Sağdaki fiyatın 2 ondalık basamağa uzatılmasını istiyorum. Kenar boşlukları veya yazı tipi boyutu gibi görünüyor, ancak etrafta arama yaptıktan sonra bu seçenekleri ayarlamak için hiçbir yer bulamıyorum. Grafiğin sol tarafında bolca yer olduğu için marjlar diyorum.Y Eksen, R

Herhangi bir fikrin var mı? Teşekkürler. Ben kaynak kodunu değiştirmeden istediğini yapmak için bir yolu yoktur sanmıyorum

require (zoo) 
require(quantmod) 

data <- structure(list(Date = structure(list(sec = c(0, 0, 0, 0, 0, 0 
), min = 0:5, hour = c(15L, 15L, 15L, 15L, 15L, 15L), mday = c(3L, 
3L, 3L, 3L, 3L, 3L), mon = c(0L, 0L, 0L, 0L, 0L, 0L), year = c(114L, 
114L, 114L, 114L, 114L, 114L), wday = c(5L, 5L, 5L, 5L, 5L, 5L 
), yday = c(2L, 2L, 2L, 2L, 2L, 2L), isdst = c(0L, 0L, 0L, 0L, 
0L, 0L)), .Names = c("sec", "min", "hour", "mday", "mon", "year", 
"wday", "yday", "isdst"), class = c("POSIXlt", "POSIXt")), Open = c(544.95, 
544.8, 544.84, 544.8, 544.75, 544.78), High = c(545.1, 544.89, 
544.9, 544.8, 544.8, 545.03), Low = c(544.8, 544.77, 544.79, 
544.6, 544.66, 544.76), Close = c(544.86, 544.79, 544.8, 544.69, 
544.75, 545.01)), .Names = c("Date", "Open", "High", "Low", "Close" 
), row.names = 330:335, class = "data.frame") 

data$Date <- as.POSIXct(strptime(data$Date, format = "%Y-%m-%d %H:%M:%S")) 
data <- read.zoo(data, FUN=as.POSIXct) 
chartSeries(data, type = "bars", theme = chartTheme("white")) 
+0

Eğer beğenmezseniz Kaynak kodunu düzenlemeyle önerdiğim çözüm, istediğiniz grafiği elde etmek için sadece 'chart_Series', 'chart_pars()' yi düzenleyebilirsiniz. – FXQuantTrader

cevap

3

:

Plot using ChartSeries

İşte yukarıdaki grafik için tekrarlanabilir kodudur. İstediğinizi elde etmenin bir yolu budur:

quantmod ad alanı içindeki chartSeries kodunu değiştirin. Değiştirmeye gerek kod alanı işlevi düzenleme hatları 7-8, 19 İçinde chartSeries.chob

fixInNamespace(x = "chartSeries.chob", pos = as.environment("package:quantmod")) 

adında bir işlevi olduğunu ve 117.

Özellikle hattı:

- hatlar 7 -8: Listedeki her bir vektörün 4. öğesini değiştirin. Bu, sağ kenar boşluğu için kenar boşluğu genişliğini denetler (ilk öğe alt kenar boşluğu genişliğini, ikinci öğeyi sol, üçüncü üst kenar boşluğunu değiştirir). Çok gibi 3 yerine 4 kullanabilirsiniz:

par.list <- list(list(mar = c(0, 3.5, 2, 4)), list(mar = c(0, 
     3.5, 0, 4)), list(mar = c(3.5, 3.5, 0, 4))) 

- hat 19: 4 öğeyi değiştirmek 4 söylemek, sol kenar çekmek için örneğin: Kod

else par(mar = c(3.5, 3.5, 2, 4)) 

19 numaralı satırda, aşağıda çizilen herhangi bir ek TA olmadan bir fiyat grafiği oluştururken gereklidir (örneğin, birim, RSI, vb)

- Şimdi, satır 117, axis(4) diyor. bunu söylemek

Değişimi:

axis(side = 4, at = axTicks(2), labels = sprintf("%.2f", axTicks(2))) 

Yorumlar: - argüman tarafı olabilir 1, eksen im etiketleri nereye düzenler 2, 3, 4. Eğer side = 2'yi denerseniz, sayıları sol kenar boşluğu yerine sol tarafa koyulur (sol taraftaki herhangi bir TA onay işareti ile sıraya dizilir).

  • at serbest değişken im etiketleri nereye gideceğini belirttiğiniz sağlar. axTicks(2), sahip olduğunuz veri kümesi için R tarafından ayarlanan varsayılan aralıktır - bu değerleri değiştirmek isterseniz, arsanızın y aralığında olan herhangi bir sayı grubunu yapın (örneğin, at = c(544.345, 545.05)'u deneyebilirsiniz) Çiziminiz yazdırıldığında sadece iki onay etiketine bakın).

  • labels bağımsız değişkeni, bağımsız değişkeniniz tarafından belirtilen konumlarda yazdırmak istediğiniz her şeyi seçmenize izin veren bir vektör vektörüdür (vektörle aynı uzunluktadır). Size yararlı bir etiket vermeye çalıştım: labels = sprintf("%.2f", axTicks(2)).Bu, onay etiketlerini iki ondalık basamağa verir (bunu, EURUSD gibi büyük bir döviz çiftinin 4 ondalık basamağı olarak değiştirebilirsiniz).

Bu değişiklikleri kaydedin. Geçerli R oturumu için değişikliklerin kalıcı olarak quantmod:::chartSeries.chob yazarak kontrol edilebildiğini kontrol edebilirsiniz (kod değişikliklerinizi görmelisiniz - eğer bir şey yapmıyorsanız, bir şey yanlıştır).

chartSeries(data, type = "bars", theme = chartTheme("white")) 

y axis adjusted

DÜZENLEME:

Gönderen:

how to get assignInNamespace to work

İsterseniz

Şimdi, normalde şekilde ChartSeries işlevini yeniden çalıştırın değişiklikleri otomatikleştir chartSeries.chob işlevi (düzenleme penceresini kullanmadan) aşağıdakileri yapabilirdiniz:

Değiştirilmiş bir sürümde, istediğiniz değişiklikleri yaparak chartSeries.chob işlevini düzenleyin. yani

chartSeries.chob2 <- function (x) 
{ 
    old.par <- par(c("pty", "mar", "xpd", "bg", "xaxs", "las", 
        "col.axis", "fg")) 
    on.exit(par(old.par)) 
    LAYOUT <- ifelse(is.null([email protected]), FALSE, TRUE) 
....[add whatever changes] 
} 

Sonra bu satırları çalıştırın:

environment(chartSeries.chob2) <- environment(get("chartSeries.chob", envir = asNamespace("quantmod"))) 
assignInNamespace(x = "chartSeries.chob", value = chartSeries.chob2, ns = "quantmod") 

Kişisel ChartSeries araziler (geçerli R oturumda) artık değişikliklerle çalışmalıdır.

DÜZENLEME 2:

quantmod kaynak kodunu düzenlemeden, ne istediğinizi başarılması için diğer bir yol, bu cevap fikirleri chart_Series(.) kullanarak ve uygulayarak elde edilebilir R quantmod chart_Series: using large fonts for y axis