代码之家  ›  专栏  ›  技术社区  ›  Joarder Kamal

如何使用ggplot2以精细粒度更改颜色图例

  •  2
  • Joarder Kamal  · 技术社区  · 12 年前

    我对ggplot2非常熟悉,并尝试使用这个熔化的创建9个geom瓷砖图 dataset 以及以下代码

    cm <- read.table("http://dl.dropboxusercontent.com/u/7147744/cm_melted.log", header=T, sep=" ")
    xlab = expression(italic(lb)~(Normalised))
    ylab = expression(italic(dti)~(Normalised))
    
    ggplot(cm, aes(x=LB, y=DTI)) +
      facet_wrap(~Method, ncol=3) +
      geom_tile(aes(fill=CM), colour="white") +
      scale_fill_gradient(low="white", high="steelblue") +   
      theme_bw() +
      coord_equal() +
      xlab(xlab) +
      ylab(ylab) +
      ggtitle("Comparison of different methods based on composite metric")
    

    我希望以更精细的粒度更改瓷砖和图例的颜色。例如,如果 CM 为0,最大值为1,则图例和图块应由11种不同颜色组成,步长为0.1。

    另一个问题是如何将“CM”中NA值的标题颜色变为白色,以便主焦点仅位于下三角形。

    最后一件事是,我可以在这些图中使用黑白图案填充吗?或任何其他适用于bw打印质量图的建议。

    非常感谢。

    更新1:

    使用时 geom_tile(aes(fill=factor(value), colour="white")) + 我可以得到下图,因为它是基于 厘米

    2 回复  |  直到 12 年前
        1
  •  3
  •   tonytonov QIBIN LI    12 年前

    以下是您可以开始的内容。您说过比例应该从0到1,但在您的示例中,最大值约为0.6,所以我考虑了这一点:

    p <- ggplot(cm, aes(x=LB, y=DTI)) +
           facet_wrap(~Method, ncol=3) +
           geom_tile(aes(fill=CM), colour="white") +
           theme_bw() +
           coord_equal() +
           xlab(xlab) +
           ylab(ylab) +
           ggtitle("Comparison of different methods based on composite metric")
    
    # n equally placed breaks for n colours
    n_breaks <- 10
    br <- c(0, max(na.omit(cm$CM)))
    split_interval <- function(v, n) seq(from=v[1], to=v[2], length.out=n)
    p + scale_fill_gradientn(colours = rainbow(n_breaks), 
                             na.value = "white", 
                             breaks = split_interval(br, n_breaks))
    

    玩一点休息和颜色的数量,以获得最合适的图片。检查可用的调色板,默认色调可能更合适。 enter image description here

        2
  •  1
  •   Joarder Kamal    12 年前

    感谢@tonytonov的出色回答。我也在分享我在这段时间里所做的努力和成果。[注:已修改数据集 cm 包括方法名称,而不是从1到9的数字]

    max_cm <- max(na.omit(cm$CM))
    min_cm <- min(na.omit(cm$CM))
    
    ggplot(cm, aes(x=LB, y=DTI)) +
      facet_wrap(~Method, ncol=3) +
      geom_tile(data= subset(m, !is.na(CM)), aes(fill=CM)) +
      scale_fill_gradientn(colours=c("darkgreen", "green", "greenyellow", "yellow", "red", "darkred"), breaks=seq(0, 1, 0.1), "CM", limit=c(min_cm, max_cm)) +
      theme_bw() +
      coord_equal() +
      xlab(xlab) +
      ylab(ylab) +
      ggtitle("Comparison of different methods based on composite metric")
    

    Output