我有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
答案 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))])
输出:
感谢One colour gradient according to value in column scatterplot in R获得间隔帮助。
答案 1 :(得分:0)
您正试图将b$stats[,3]
传递给boxplot
,b
本身会创建变量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}}