Frage

Kennt jemand eine Möglichkeit, einen Boxplot in R mit einer Zeile (oder einem anderen Symbol) im Wert zu erzeugen, der dem Mittelwert entspricht?

Vielen Dank!

War es hilfreich?

Lösung

abline(h=mean(x))

Für eine horizontale Linie (verwenden Sie V anstelle von H für vertikal, wenn Sie Ihren Boxplot horizontal orientieren) oder

points(mean(x))

für einen Punkt. Verwenden Sie den Parameter pch das Symbol ändern. Möglicherweise möchten Sie sie auch färben, um die Sichtbarkeit zu verbessern.

Beachten Sie, dass diese aufgerufen werden, nachdem Sie den Boxplot gezeichnet haben.

Wenn Sie die Formelschnittstelle verwenden, müssten Sie den Vektor der Mittelwerte konstruieren. Zum Beispiel das erste Beispiel von ?boxplot:

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

Wenn Ihre Daten fehlende Werte enthalten, möchten Sie möglicherweise das letzte Argument der tapply Funktion mit function(x) mean(x,na.rm=T)

Andere Tipps

Mit ggplot2:

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

Prüfen Diagramm.boxplot vom Paket PerformanceAnalytics. Sie können das Symbol definieren, das für den Mittelwert der Verteilung verwendet werden soll.

ALT -Text http://bm2.genes.nig.ac.jp/rgm2/r_current/library/performanceanalytics/man/images/big_chart.boxplot_001.png

Basierend auf den Antworten von @james und @Jyotirmoy Bhattacharya habe ich diese Lösung entwickelt:

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)

(Sehen Dies Veröffentlichen Sie für weitere Details)

Wenn Sie horizontale Box -Diagramme Punkte hinzufügen möchten, sehen Sie bitte Dies Post.

Ich denke auch, dass Diagramm.BoxPlot die beste Option ist. Es gibt Ihnen die Position des Mittelwerts. Wenn Sie jedoch eine Matrix mit Rückgaben haben, benötigen Sie nur eine Codezeile, um alle Boxplots in einem Diagramm zu erhalten.

Hier ist ein kleines Beispiel für ein kleines ETF -Portfolio.

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)

Matrix zurückgeben

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

Box -Diagramm der Rückkehrmatrix

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)

Sie können versuchen, den Mittelwert zu ändern. Hoffe es hat geholfen. :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top