Qualcuno sa di un modo di generare un boxplot in R con una linea (o un altro simbolo) nel valore corrispondente alla media?Boxplot in R che mostra la media
Grazie!
Qualcuno sa di un modo di generare un boxplot in R con una linea (o un altro simbolo) nel valore corrispondente alla media?Boxplot in R che mostra la media
Grazie!
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)
Controllare chart.Boxplot dal pacchetto PerformanceAnalytics
. Ti consente di definire il simbolo da utilizzare per la media della distribuzione.
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)
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.
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. :)
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
L'ho aggiunto alla risposta come esempio ora – James