R - 具有中值温度的Boxplot着色

时间:2014-11-07 12:49:19

标签: r colors boxplot

我有39种物种的箱线图及其分布范围的年温度值(bio01)。中值在boxplot$stats的第3行。我想将最高中值红色和最低蓝色(即温度梯度)着色。 medcol下面的代码无效。有人可以提出解决方案吗?

b <- boxplot(bio01 ~ species, data=species.threshold.22.climate.751, las=2, ylab ="bio01", par(mar = c(18, 5,5, 2)+ 0.1), cex.names=0.2, bw = 5, medcol=b$stat[3,])
b$stats

2 个答案:

答案 0 :(得分:3)

这应该会让你走在正确的轨道上:

# Dummy data
x = data.frame(col1=rep(month.abb, 20), col2=rnorm(20*12))

# develop colour gradient
cols = colorRampPalette(c("blue", "red"))
# Calculate medians
m = unname(tapply(x$col2, x$col1, median))

# Plot and colour by size of median
boxplot(col2 ~ col1, x, col=cols(length(unique(x$col1)))[findInterval(m, sort(m))])

输出: enter image description here

感谢One colour gradient according to value in column scatterplot in R获得间隔帮助。

答案 1 :(得分:0)

您正试图将b$stats[,3]传递给boxplotb本身会创建变量b <- boxplot(weight ~ Diet, data=ChickWeight) boxplot(weight ~ Diet, data=ChickWeight, medcol=order(b$stats[,3])) 。这不起作用。

最简单的事情可能是两次调用boxplot。这是一个有效的例子:

b <- boxplot(weight ~ Diet, data=ChickWeight)
colors <- colorRampPalette(c("red", "blue"))
colors <- colors(nrow(b$stats))
boxplot(weight ~ Diet, data=ChickWeight, medcol=colors[order(b$stats[,3])])

或者你可以做一些更复杂的事情,比如

{{1}}