2012-07-30 15 views
5

R için bir yeni insanım ve web sitenizi kullanmak çok yardımcı oldu. Maalesef şu anda iki gün boyunca kodumla mücadele ediyordum, bu yüzden birkaç soru sormak için istedim. Ben pdf sayfasına koymak için güzel grafikler oluşturmaya çalışıyorum ama kullanıyorum tüm paketler ile çok az sorun yaşıyorum. Yani, gerçekleştirmek istediğim üç adet grafik ve bir korelasyon tablosu içeren bir pdf sayfası oluşturmak. Aşağıda, yaptığım şeye çok benzeyen olan bir örnek oluşturdum ama değişikliğini değiştirmek istediğim birkaç şey var. Grafikler için quantmod içinde chartSeries kullanıyorum ve tablo için textplot kullanıyorum.quantmod'da grafikSource ile çalışma

Birkaç sorular:

  1. o grafikler sağ üst köşesindeki tarih kaldırmak mümkün mü?
  2. Metin yerine Son xxxx (yeşil seri metni) Dizinin kendisine ait adını almak istiyorum, ör. MSFT, bu yapılabilir mi?
  3. Eksen adlarını nasıl verebilirim, ör. Dönüş tarihi?
  4. Kümülatif Fark grafiğinde addVo() kullanıyorum ve bu güzel barPlot işlevi işlevi veriyor. Diğer grafiklerde addVo() kullanmıyorum sadece addTA ve type = 'h' ve bar/histogram grafikleri arasındaki farkı görebilirsiniz. AddVo'da olduğu gibi addTA kullanarak aynı arsa elde etmek mümkün mü?
  5. Korelasyon tablosuna daha iyi uymanın ve/veya daha profesyonel yapmanın bir yolu var mı? Belki başka bir işlev daha mı iyi?

iyisi,

OTB

install.packages("quantmod") 
install.packages("gplots") 
library(quantmod) 
library(gplots) 

#setwd("..........") 

getSymbols("MSFT") 
getSymbols("AAPL") 
getSymbols("COKE") 
getSymbols("PEP") 

#Get the return 
MSFT.Return <- diff(MSFT)/lag(MSFT) 
AAPL.Return <- diff(AAPL)/lag(AAPL) 
COKE.Return <- diff(COKE)/lag(COKE) 
PEP.Return <- diff(PEP)/lag(PEP) 

#Get the return for last two months and only get close price return. 
#because in my data I only have the close price. 
MSFT.Close <- MSFT.Return['2012-06-01::2012-07-27', 'MSFT.Close'] 
AAPL.Close <- AAPL.Return['2012-06-01::2012-07-27', 'AAPL.Close'] 
COKE.Close <- COKE.Return['2012-06-01::2012-07-27', 'COKE.Close'] 
PEP.Close <- PEP.Return['2012-06-01::2012-07-27', 'PEP.Close'] 

pdf(sprintf("%s.pdf","ExampleGraph"), width=11.69, height=8.27) 

layout(matrix(1:8, nrow=4)) 

#Get the difference in return 
techDifference <- MSFT.Close - AAPL.Close 
bevDifference <- COKE.Close - PEP.Close 

#Rename columns 
colnames(MSFT.Close)[1] <- "MSFT" 
colnames(AAPL.Close)[1] <- "AAPL" 
colnames(techDifference)[1] <- "Difference" 

colnames(COKE.Close)[1] <- "COKE" 
colnames(PEP.Close)[1] <- "PEP" 
colnames(bevDifference)[1] <- "Difference" 

#Combine into two tables 
tech <- cbind(MSFT.Close,AAPL.Close,techDifference) 
bev <- cbind(COKE.Close,PEP.Close,bevDifference) 

#Plot charts 
chartSeries(tech, order=1,up.col='green', name='MSFT & AAPL', layout=NULL, 
TA=c("addTA(tech,order=2,on=1,layout=NULL); 
addTA(tech$Difference,legend='Difference',type='h',layout=NULL)")) 

chartSeries(bev, order=1,up.col='green', name='COKE & PEP', layout=NULL, 
TA=c("addTA(bev,order=2,on=1,layout=NULL); 
addTA(bevDifference$Difference,legend='Difference',type='h',layout=NULL)")) 

#Take the cumulative difference for each sector 
techCumulative <- cumsum(abs(techDifference)) 
bevCumulative <- cumsum(abs(bevDifference)) 
diffCumulative <- techCumulative - bevCumulative 

#Rename columns 
colnames(techCumulative)[1] <- "Tech" 
colnames(bevCumulative)[1] <- "Beverage" 
#If I set the name as Volume, I can use addVo() and get nice barplot. 
#Problem with that is the legend name will be Volume but I would like to 
#have it Difference and of course I'm using wrong column name. 
colnames(diffCumulative)[1] <- "Volume" 

#Combine into one table 
cumulative <- cbind(techCumulative,bevCumulative,diffCumulative) 

#Plot chart 
chartSeries(cumulative,order=1,up.col='green', name='Cumulative Difference', layout=NULL, 
TA=c("addTA(cumulative,order=2,on=1,layout=NULL)", addVo())) 

#Get the correlation matrix 
correlationTable <- cbind(tech[,1:2],bev[,1:2]) 
correlation <- cor(correlationTable) 
corTable <- as.table(correlation) 
corrFormatted <- formatC(corTable, format = "f", digits = 3) 
textplot(corrFormatted,valign="top",col.data=colors()[300], 
col.rownames=colors()[300],col.colnames=colors()[300]) 
title("Correlation",cex.main=2.5,col.main=colors()[300]) 

dev.off() 

cevap

2

Bazı iyi sorular.

S1:

old.adj <- par('adj') 
par('adj'=0) 
do.call('title',list([email protected], [email protected]$fg.col)) 
par('adj'=1) 
do.call('title',list(paste('[',start(xx),'/',end(xx),']', sep='') 
        ,[email protected]$main.col)) 
par('adj'=old.adj) 

yani: Hayır quantmod:::chartSeries.chob bu kodu vardır başlangıç ​​(xx)/end (xx) biti kodlanmış.

Q2. Yine, sabit kodlu anlaşılıyor (aynı işlevi):

if([email protected]=='line') { 
    lines(x.pos,Closes,[email protected]$up.col,[email protected]) 
    main.key <- c(list(list(legend= 
         paste('Last',last(Closes)), 
         [email protected]$up.col)),main.key) 
} 

(Özür, Q3/Q4/Q5 ile yardımcı kaynak kodu benim çalışmalarında şey bulamadık)

+0

Merhaba Darren, Cevabınız için çok teşekkür ederim, en azından mümkün olmadığını bilmek güzel. Birisi diğer soruları cevaplayabilirse memnun olurum. – OTB

İlgili konular