Boxplot в R показывает среднее - PullRequest
26 голосов
/ 22 марта 2010

Кто-нибудь знает способ генерации прямоугольника в R с линией (или другим символом) в значении, соответствующем среднему значению?

Спасибо!

Ответы [ 5 ]

39 голосов
/ 22 марта 2010
abline(h=mean(x))

для горизонтальной линии (используйте v вместо h для вертикальной, если вы ориентируете свой блокпост горизонтально) или

points(mean(x))

за очко. Используйте параметр pch, чтобы изменить символ. Вы можете покрасить их, чтобы улучшить видимость.

Обратите внимание, что они вызываются после того, как вы разыграли поле.

Если вы используете интерфейс формулы, вам придется построить вектор средних. Например, беря первый пример из ?boxplot:

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

Если ваши данные содержат пропущенные значения, вы можете заменить последний аргумент функции tapply на function(x) mean(x,na.rm=T)

12 голосов
/ 24 марта 2010

С ggplot2:

p<-qplot(spray,count,data=InsectSprays,geom='boxplot')
p<-p+stat_summary(fun.y=mean,shape=1,col='red',geom='point')
print(p)
10 голосов
/ 22 марта 2010

Чек диаграмма. Боксплот из пакета PerformanceAnalytics. Позволяет определить символ, который будет использоваться для среднего значения распределения.

альтернативный текст http://bm2.genes.nig.ac.jp/RGM2/R_current/library/PerformanceAnalytics/man/images/big_chart.Boxplot_001.png

0 голосов
/ 08 апреля 2013

Я также думаю, что chart.Boxplot - лучший вариант, он дает вам позицию среднего значения, но если у вас есть матрица с возвратами, все, что вам нужно, - это одна строка кода, чтобы получить все блокплоты на одном графике.

Вот небольшой пример портфолио 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)

Матрица возврата

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

Матрица возврата матрицы

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)

Вы можете попробовать изменить значение mean.symbol и удалить или изменить значение median.symbol. Надеюсь, это помогло. :)

0 голосов
/ 02 апреля 2012

Основываясь на ответах @James и @Jyotirmoy Bhattacharya, я пришел к следующему решению:

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)

(подробнее см. этот пост)

Если вы хотите добавить точки к горизонтальным рамкам, см. этот пост.

...