代码之家  ›  专栏  ›  技术社区  ›  Maiasaura

有没有办法为ggplot的alpha添加图例?

  •  4
  • Maiasaura  · 技术社区  · 16 年前

    我有一个有许多重叠点的图(从2到10)。给点增加抖动会让它变得非常嘈杂和不吸引人。我喜欢在美学中加入阿尔法。然而,我希望有一个图例,读者可以看到每个透明胶片上有多少点重叠。有这样的方法吗?

    ggplot(data=mydata,aes(x=x,y=y)) + geom_point(size=3,shape=2,aes(alpha=1/3))
    

    假设我使用上面的代码。我该如何将阿尔法的传奇融入其中?

    3 回复  |  直到 16 年前
        1
  •  1
  •   John Colby    15 年前

    下面是一个如何伪造的例子。尝试几次,同时改变 alpha .

    require(ggplot2)
    
    n = 10000
    alpha = 0.01
    
    set.seed(12345)
    data = data.frame(replicate(2, rnorm(n)))
    
    dev.new(width=4, height=3)
    p = qplot(X1, X2, data=data, alpha=alpha)
    
    fake_scale = scale_alpha('# of overlapping pts', breaks=pretty(c(alpha, 1)), labels=as.character(pretty(c(alpha, 1))/alpha))
    
    p + fake_scale
    

    alpha = 0.1

    enter image description here

    alpha = 0.01

    enter image description here

        2
  •  0
  •   apeescape    16 年前

    不完全是你想要的,但是geom_hex()呢?

    如果你不把它离散化,我认为R需要计算重叠面积和重叠数(sp?)(这也取决于点的大小),这听起来很难。

    library(hexbin)
    
    mydata <- data.frame(x = rnorm(100), y = rnorm(100))
    ggplot(data=mydata,aes(x=x,y=y)) + geom_hex()
    
        3
  •  0
  •   BarkleyBG    9 年前

    根据其他答案的提示,似乎您可能希望将x-y点划分为唯一值,然后汇总每个x-y坐标单元的唯一值数量。

    使用另一个答案的假数据,

    library(ggplot2)
    library(dplyr)
    library(magrittr)
    
    n = 10000
    
    set.seed(12345)
    data = data.frame(replicate(2, rnorm(n)))
    

    我按小数点后的第一位进行装箱,然后计算每个箱子里有多少个

    data2 <- data %>% mutate(
      x = round(X1,1),  
      y = round(X2,1)
    ) %>% 
      group_by(x,y) %>%
      tally() %>% 
      dplyr::filter(n<=10) %>% 
      mutate(transp = n/10) 
    

    我筛选出最大的垃圾箱只是为了说明。现在 transp 列具有所需的计算,可以提供给 alpha 在传说中得到它

    data2 %>% 
      ggplot(aes(x=x,y=y)) + 
      geom_point(aes(alpha = as.factor(transp))) + 
      scale_alpha_discrete(
        "Number of overlapping points",
        labels = 1:10
      )+ 
      theme(legend.position = "bottom")
    

    照片:

    enter image description here

    推荐文章