【问题标题】:R - Boxplot with median values temperature colouredR - 带有中值温度的箱线图
【发布时间】:2014-11-07 12:49:18
【问题描述】:

我有 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

【问题讨论】:

    标签: r colors boxplot


    【解决方案1】:

    这应该会让你走上正轨:

    # 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 的帮助。

    【讨论】:

    • 谢谢,这就是我要找的!
    • 太好了,很高兴帮助@niels-raes。你能把我的答案标记为正确吗?
    【解决方案2】:

    您正在尝试将b$stats[,3] 传递给boxplot,它本身会创建变量b。这行不通。

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

    b <- boxplot(weight ~ Diet, data=ChickWeight)
    boxplot(weight ~ Diet, data=ChickWeight, medcol=order(b$stats[,3]))
    

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

    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])])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      • 2018-05-13
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多