2010-03-22 17 views

risposta

35
abline(h=mean(x)) 

per una linea orizzontale (v uso al posto di h per verticale se di orientare il vostro boxplot in orizzontale), o

points(mean(x)) 

per un punto. Utilizzare il parametro pch per modificare il simbolo. Potresti colorarli per migliorare anche la visibilità.

Si noti che questi vengono chiamati dopo aver disegnato il boxplot.

Se si utilizza l'interfaccia formula, è necessario costruire il vettore di medie. Ad esempio, prendendo il primo esempio da ?boxplot:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray") 
means <- tapply(InsectSprays$count,InsectSprays$spray,mean) 
points(means,col="red",pch=18) 

Se i dati contengono valori mancanti, si potrebbe desiderare di sostituire l'ultimo argomento della funzione tapply con function(x) mean(x,na.rm=T)

+0

Puoi spiegare come questo può essere fatto nel primo esempio dell'aiuto di boxplot {graphics} per esempio? boxplot (count ~ spray, data = InsectSprays, col = "lightgray") – Brani

+0

L'ho aggiunto alla risposta come esempio ora – James

8

Con ggplot2:

p<-qplot(spray,count,data=InsectSprays,geom='boxplot') 
p<-p+stat_summary(fun.y=mean,shape=1,col='red',geom='point') 
print(p) 
0

Sulla base delle risposte di @James e @Jyotirmoy Bhattacharya, ho trovato questa soluzione:

zx <- replicate (5, rnorm(50)) 
zx_means <- (colMeans(zx, na.rm = TRUE)) 
boxplot(zx, horizontal = FALSE, outline = FALSE) 
points(zx_means, pch = 22, col = "darkgrey", lwd = 7) 

(Vedere this postale per maggiori dettagli)

Se si desidera aggiungere punti a trame scatola orizzontale, si prega di consultare this posta.

0

Penso anche che chart.Boxplot sia l'opzione migliore, ti dà la posizione della media ma se hai una matrice con restituzione tutto ciò di cui hai bisogno è una riga di codice per ottenere tutti i boxplot in un grafico.

Ecco un piccolo esempio di portafoglio ETF.

library(zoo) 
library(PerformanceAnalytics) 
library(tseries) 
library(xts) 

VTI.prices = get.hist.quote(instrument = "VTI", start= "2007-03-01", end="2013-03-01", 
         quote = c("AdjClose"),provider = "yahoo",origin ="1970-01-01", 
         compression = "m", retclass = c("zoo")) 

VEU.prices = get.hist.quote(instrument = "VEU", start= "2007-03-01", end="2013-03-01", 
         quote = c("AdjClose"),provider = "yahoo",origin ="1970-01-01", 
         compression = "m", retclass = c("zoo")) 

VWO.prices = get.hist.quote(instrument = "VWO", start= "2007-03-01", end="2013-03-01", 
         quote = c("AdjClose"),provider = "yahoo",origin ="1970-01-01", 
         compression = "m", retclass = c("zoo")) 


VNQ.prices = get.hist.quote(instrument = "VNQ", start= "2007-03-01", end="2013-03-01", 
         quote = c("AdjClose"),provider = "yahoo",origin ="1970-01-01", 
         compression = "m", retclass = c("zoo")) 

TLT.prices = get.hist.quote(instrument = "TLT", start= "2007-03-01", end="2013-03-01", 
         quote = c("AdjClose"),provider = "yahoo",origin ="1970-01-01", 
         compression = "m", retclass = c("zoo")) 

TIP.prices = get.hist.quote(instrument = "TIP", start= "2007-03-01", end="2013-03-01", 
         quote = c("AdjClose"),provider = "yahoo",origin ="1970-01-01", 
         compression = "m", retclass = c("zoo")) 

index(VTI.prices) = as.yearmon(index(VTI.prices)) 
index(VEU.prices) = as.yearmon(index(VEU.prices)) 
index(VWO.prices) = as.yearmon(index(VWO.prices)) 

index(VNQ.prices) = as.yearmon(index(VNQ.prices)) 
index(TLT.prices) = as.yearmon(index(TLT.prices)) 
index(TIP.prices) = as.yearmon(index(TIP.prices)) 

Prices.z=merge(VTI.prices, VEU.prices, VWO.prices, VNQ.prices, 
      TLT.prices, TIP.prices) 

colnames(Prices.z) = c("VTI", "VEU", "VWO" , "VNQ", "TLT", "TIP") 

returnscc.z = diff(log(Prices.z)) 

start(returnscc.z) 
end(returnscc.z) 
colnames(returnscc.z) 
head(returnscc.z) 

ritorno Matrix

ret.mat = coredata(returnscc.z) 
class(ret.mat) 
colnames(ret.mat) 
head(ret.mat) 

Box Plot di ritorno Matrix

chart.Boxplot(returnscc.z, names=T, horizontal=TRUE, colorset="darkgreen", as.Tufte =F, 
      mean.symbol = 20, median.symbol="|", main="Return Distributions Comparison", 
      element.color = "darkgray", outlier.symbol = 20, 
      xlab="Continuously Compounded Returns", sort.ascending=F) 

È possibile provare a cambiare il mean.symbol, e rimuovere o cambiare l'median.symbol. Spero che sia stato d'aiuto. :)