【问题标题】:R ggplot2 - geom_point custom color ranges and colorsR ggplot2 - geom_point 自定义颜色范围和颜色
【发布时间】:2016-12-05 14:16:49
【问题描述】:

我正在尝试通过一个函数来概括一组我经常需要的图 - 我无法在其中获得某些方面。

myCustomScatter <- function(df, col_x, col_y, col_z){
  p1 <- ggplot(df, aes(x=df[,col_x]))
  p1 <- p1 + geom_point(aes(y=df[,col_y], color=df[,col_z]))
  p1 <- p1 + scale_x_continuous(name=colnames(df)[col_x])
  p1 <- p1 + scale_y_continuous(name=colnames(df)[col_y])
  return(p1)
}

df1 <- data.frame(a=seq(1.1,9.9,1.1), b=seq(0.1,0.9,0.1), c=rev(seq(10.1, 99.9, 11.1)))

myCustomScatter(df1, 1, 2, 3)

这如预期的那样给出了以下情节。

  1. 我需要基于 df[,3] 值的离散颜色范围 - 我需要 blue 用于值 > 90,green 用于 90 >= 值 > 70,yellow 用于 70 >= 值> 55, orange for 55 >= value > 25 & red for value

  2. 我需要图例的标题而不是 df[,col_z]c,我可以通过 colnames(df1)[3] 获得 - 我如何指定这个?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    你可以试试这个:

    myCustomScatter <- function(df, col_x, col_y, col_z){
      p1 <- ggplot(df, aes_string(x=df[,col_x], color = cut(df[,col_z], c(-Inf, 25, 55, 70, 90, Inf))), size = 6)
      p1 <- p1 + geom_point(aes_string(y=df[,col_y]))
      p1 <- p1 + scale_x_continuous(name=colnames(df)[col_x])
      p1 <- p1 + scale_y_continuous(name=colnames(df)[col_y]) # + guides(color=guide_legend('c'))
      p1 <- p1 + scale_color_manual(name = names(df)[col_z],
                                    values = c("red",
                                               "orange",
                                               "yellow",
                                               "green",
                                               "blue"))
      return(p1)
    }
    
    df1 <- data.frame(a=seq(1.1,9.9,1.1), b=seq(0.1,0.9,0.1), c=rev(seq(10.1, 99.9, 11.1)))
    
    myCustomScatter(df1, 1, 2, 3)
    

    【讨论】:

    • -1 因为这不是 aes_string 应该如何工作的(并且映射会在更复杂的图中失败,可能没有警告)
    【解决方案2】:

    如果事先不知道变量名,请使用aes_string

    myCustomScatter <- function(df, col_x, col_y, col_z){
    
      ggplot(df, aes_string(x=names(df)[col_x], y = names(df)[col_y])) + 
        geom_point(aes_string(colour=names(df)[col_z])) + 
        scale_x_continuous(names(df)[col_x]) + 
        scale_y_continuous(names(df)[col_y]) +
        scale_color_gradientn(colours = terrain.colors(5))
    }
    
    df1 <- data.frame(a=seq(1.1,9.9,1.1), b=seq(0.1,0.9,0.1), c=rev(seq(10.1, 99.9, 11.1)))
    
    myCustomScatter(df1, 1, 2, 3)
    

    【讨论】:

    • scale_color_gradientn(colours = terrain.colors(5)) - 这将创建一个具有 5 种颜色的渐变,将 df[,col_z] 的范围划分为相等的范围 - 对吧? - 但是,需要的范围是25, 55, 70, 90 - 如何指定?
    • 尝试 ?scale_color_gradientn 中的值
    • 我看过这个 - 但不明白如何使用它?我需要做的是指定df[col_z,] 的离散范围并以离散颜色显示它们。
    猜你喜欢
    • 2021-12-27
    • 1970-01-01
    • 2016-05-29
    • 1970-01-01
    • 2017-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    • 1970-01-01
    相关资源
    最近更新 更多