2012-07-30 16 views
5

Sono un novizio di R ed è stato molto utile utilizzare il sito Web. Purtroppo ho lottato con il mio codice ora per due giorni quindi volevo per fare alcune domande. Ho cercato di creare grafici piacevoli da inserire in un foglio pdf , ma sto avendo pochi problemi con tutti i pacchetti che sono stati utilizzando. Quindi quello che voglio realizzare è creare un foglio pdf con tre grafici e una tabella di correlazione. Di seguito è un esempio che ho creato che è molto simile a quello che voglio fare, ma ci sono poche cose che vorrei cambiare . Sto usando chartSeries in quantmod per i grafici e per la tabella Sto usando il testo.Utilizzo di chartSeries in quantmod

alcune domande:

  1. è possibile rimuovere la data nell'angolo in alto a destra delle grafici?
  2. Invece del testo Ultimo xxxx (il testo della serie verde) mi piacerebbe ottenere il nome della serie stessa, ad es. MSFT, è fattibile?
  3. Come posso dare i nomi degli assi, ad es. Data di ritorno?
  4. Nel grafico della differenza cumulativa sto usando l'addVo() e la funzione dà questo bel barPlot. Negli altri grafici non sto usando addVo() solo addTA e type = 'h' e puoi vedere la differenza dei grafici della barra/istogramma . È possibile ottenere la stessa trama usando addTA come in addVo?
  5. C'è un modo per adattare meglio la tabella di correlazione e/o farlo più professionale. Forse un'altra funzione è meglio?

migliore,

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

risposta

2

Alcune buone domande.

Q1: No. quantmod:::chartSeries.chob ha questo codice:

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) 

Vale a dire il bit start (xx)/end (xx) è hardcoded.

Q2. Anche in questo caso, sembra essere hard-coded (stessa funzione):

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

(non ho trovato nulla nei miei studi del codice sorgente per aiutare con Q3/Q4/Q5, sorry)

+0

Hi Darren, molte grazie per le tue risposte, è almeno bello sapere che non è possibile. Lo apprezzerei se qualcuno potesse rispondere alle altre domande. – OTB

Problemi correlati