Domanda

Qualcuno sa di un modo per generare un grafico a scatole in R con una linea (o un altro simbolo) del valore corrispondente alla media?

Grazie!

È stato utile?

Soluzione

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 cambiare il simbolo. Si consiglia di colorare loro di migliorare la visibilità anche.

Si noti che questi sono chiamati dopo aver disegnato il grafico a scatole.

Se si utilizza l'interfaccia formula, si dovrà costruire il vettore di mezzi. 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)

Altri suggerimenti

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)

chart.Boxplot dalla confezione PerformanceAnalytics . Esso consente di definire il simbolo da utilizzare per la media della distribuzione.

alt text http: //bm2.genes .nig.ac.jp / modello RGM2 / R_current / library / PerformanceAnalytics / uomo / immagini / big_chart.Boxplot_001.png

Sulla base delle risposte da parte @James e @Jyotirmoy Bhattacharya mi si avvicinò con 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)

(Vedi questo post per maggiori dettagli)

Se si desidera aggiungere punti a trame scatola orizzontale, consulta questo inviare.

Penso anche chart.Boxplot è l'opzione migliore, ti dà la posizione del mezzo, ma se si dispone di una matrice con i ritorni tutto ciò che serve è una riga di codice per ottenere tutti i grafici a scatole in un unico grafico.

Ecco un piccolo esempio 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)

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

Si può provare a cambiare il mean.symbol, e rimuovere o cambiare l'median.symbol. Speranza ha aiutato. :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top