Кто-нибудь знает способ генерации ящика в R с линией (или другим символом) в значении, соответствующем среднему?
Спасибо!
Кто-нибудь знает способ генерации ящика в R с линией (или другим символом) в значении, соответствующем среднему?
Спасибо!
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)
Отметьте chart.Boxplot из пакета PerformanceAnalytics
. Он позволяет определить символ для использования для среднего значения распределения.
С ggplot2
:
p<-qplot(spray,count,data=InsectSprays,geom='boxplot')
p<-p+stat_summary(fun.y=mean,shape=1,col='red',geom='point')
print(p)
Основываясь на ответах @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)
(Подробнее см. .
Если вы хотите добавить точки в горизонтальные рамки, см. эту статью.
Я также думаю, что chart.Boxplot - лучший вариант, он дает вам позицию среднего значения, но если у вас есть матрица с возвращаемыми значениями, вам нужна только одна строка кода, чтобы получить все ящики в одном графике.
Вот небольшой пример портфеля ЕФО.
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. Надеюсь, это помогло.:)