Question

Quelqu'un sait d'une manière de générer un boxplot dans R par une ligne (ou un autre symbole) à la valeur correspondant à la moyenne?

Merci!

Était-ce utile?

La solution

abline(h=mean(x))

pour une ligne horizontale (utilisation v au lieu de h pour la verticale si vous orienter votre boxplot horizontalement) ou

points(mean(x))

pour un point. Utilisez le paramètre pch pour changer le symbole. Vous pouvez les colorer pour améliorer la visibilité aussi.

Notez que ceux-ci sont appelés après avoir attiré l'boxplot.

Si vous utilisez l'interface de formule, vous devez construire le vecteur de moyens. Par exemple, en prenant le premier exemple de ?boxplot:

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

Si vos données contiennent des valeurs manquantes, vous pouvez remplacer le dernier argument de la fonction tapply avec function(x) mean(x,na.rm=T)

Autres conseils

Avec ggplot2:

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

Vérifier chart.Boxplot du package PerformanceAnalytics . Il vous permet de définir le symbole à utiliser pour la moyenne de la distribution.

texte alt http: //bm2.genes .nig.ac.jp / RGM2 / R_current / bibliothèque / PerformanceAnalytics / homme / images / big_chart.Boxplot_001.png

Sur la base des réponses par @Jyotirmoy et Bhattacharya @ James je suis venu avec cette solution:

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)

(Voir ce poste pour plus de détails)

Si vous souhaitez ajouter des points à des parcelles de boîte horizontales, s'il vous plaît voir cette poster.

Je pense aussi chart.Boxplot est la meilleure option, il vous donne la position de la moyenne, mais si vous avez tout ce que vous avez besoin d'une matrice avec des rendements est une ligne de code pour obtenir tous les boxplots dans un graphique.

Voici un petit exemple du portefeuille de l'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)

Retour Matrice

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

Box Terrain de retour Matrice

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)

Vous pouvez essayer de modifier le mean.symbol, et supprimer ou modifier le median.symbol. Espérons que cela a aidé. :)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top