【问题标题】:Select colour of boxplot based on function in R根据R中的函数选择箱线图的颜色
【发布时间】:2014-07-11 17:48:21
【问题描述】:

我正在按生物量中位数按珊瑚礁名称绘制鱼类生物量的箱线图。所有礁名称(站点)都在MPA 之内或之外,例如MPA="1"MPA=="0"。目前所有地块都显示为绿色。

例如,如何将 MPA=="0" 站点显示为蓝色,将 MPA=="1" 显示为绿色。同时保持鱼类生物量的秩序。

MPA <- factor(Fish$MPA)
bymedian <- with(Fish, reorder(ReefName, log10(Biomassm+1)), median)
boxplot(log10(Biomassm+1) ~ bymedian, data = Fish,
        xlab = "ReefName", ylab = "Biomassm",
        main = "Biomassm in Caribbean", varwidth = TRUE, 
        col=(c("darkgreen")), las=3, cex.axis=0.3)

谢谢

【问题讨论】:

    标签: r colors plot boxplot


    【解决方案1】:

    为此使用ggplot2 包可能是一个更好的主意。您的代码将如下所示:

    ggplot(data=Fish, aes(x=reorder(ReefName, log10(Biomassm+1)), median), y=Biomassm, fill=MPA)) +
      geom_boxplot() +
      scale_y_log10("Biomassm") +
      xlab("ReefName") +
      scale_fill_manual(values=c("blue", "green")) +
      ggtitle("Biomassm in Caribbean")
    

    【讨论】:

    • data.frame 中的错误(x = c(44L, 44L, 44L, 44L, 40L, 40L, 40L, 40L, 22L, : 参数暗示不同的行数:326, 0
    • 您能否在问题中包含 dput 的数据框?
    【解决方案2】:

    这是一组根据 MPA 值着色的箱线图:

    # generate some data
    set.seed(1)
    X = matrix(rnorm(100), ncol=10)
    
    # order by median
    X = X[,order(apply(X, 2, median))]
    
    # some fake MPA values  
    MPA = round(runif(n=10, min=0, max=1))
    
    # generate boxplots and check if MPA==1
    boxplot(X, col=ifelse(test=MPA==1, yes='green', no='blue'))
    
    # add legend
    legend(x='bottomleft', fill=c('green','blue'), legend=c('MPA=1', 'MPA=0'), inset=c(0.01))
    

    ifelse 的输出是根据 MPA 值的颜色向量,这些颜色用于为框着色:

    [1] "blue"  "blue"  "green" "blue"  "blue"  "green" "green" "blue"  "blue"  "green"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多