【问题标题】:Change geom_point to a gradient filled shape/polygon将 geom_point 更改为渐变填充形状/多边形
【发布时间】:2018-10-25 11:15:10
【问题描述】:

我正在探索特定索引的变化方式。该指数是对数转换尺度上第 10 个百分位与第 90 个百分位之间的比率的度量。为了探索我创建了这个数据集的索引:

dt = 
  data_frame(p10 = sample(seq(0.1,1.25,0.05), replace = TRUE, 10000),
             p90 = sample(seq(0.25,1.75,0.05), replace = TRUE, 10000)) %>% 
  filter(p90 > p10) %>%
  mutate(p10 = log(p10), p90 = log(p90)) %>%
  mutate(index = p10/p90) %>%
  filter(abs(index) < 10) %>%
  select(index, p10, p90)
dt

我绘制数据集以查看指数如何随着对数转换百分位数的变化而变化。

dt %>%
  ggplot(aes(x = p10, y = p90)) +
  geom_point(aes(colour = index)) +

  geom_abline(colour = "black", size = 0.75) +
  geom_hline(colour = "black", yintercept = 0, size = 0.75) +
  geom_vline(colour = "black", xintercept = 0, size = 0.75) +

  scale_colour_distiller(type = "div", palette = 1) + 

  coord_equal() +
  xlim(-2.5,0.75) +
  ylim(-2.5,0.75) +
  theme_bw()

此图很好地说明了我个人使用的点,但它不适合演示。我希望我可以用渐变填充的多边形替换这些点。但是,弄清楚如何做到这一点超出了我的能力。此外,我不确定它是否真的可以做到。有人会介意用这个把我指向正确的方向吗?非常感谢!

【问题讨论】:

    标签: r ggplot2 polygon gradient


    【解决方案1】:

    您可以查看interp 函数,看看它是否满足您的需求:

    library(akima)
    
    # interpolate data
    dt.interp <- interp(x = dt$p10, y = dt$p90, z = dt$index,
                        duplicate = "mean",
                        nx = 100, ny = 100) # set nx / ny based on how fine your want the polygons to be
    
    # convert results back to a data frame
    dt.interp <- data.frame(
      p10 = rep(dt.interp$x, times = length(dt.interp$y)),
      p90 = rep(dt.interp$y, each = length(dt.interp$x)),
      index = as.vector(dt.interp$z)
    )
    
    # plot results, replacing geom_point with geom_tile & color scale with fill scale
    dt.interp %>%
      ggplot(aes(x = p10, y = p90)) +      
      geom_tile(aes(fill = index)) +      
      geom_abline(colour = "black", size = 0.75) +
      geom_hline(colour = "black", yintercept = 0, size = 0.75) +
      geom_vline(colour = "black", xintercept = 0, size = 0.75) +      
      scale_fill_distiller(type = "div", palette = 1) +       
      coord_equal() +
      xlim(-2.5,0.75) +
      ylim(-2.5,0.75) +
      theme_bw()
    

    (灰色区域是 NA 值,因为那里没有可用于插值的点。如果要隐藏它们,或者为它们分配不同的颜色,可以在绘图之前在 df.interp 上运行 na.omit()。

    【讨论】:

      【解决方案2】:

      这是一个将点转换为多边形并设置每个多边形颜色的示例。我怀疑这正是你想要的,但也许这是一个开始。

      library(dplyr)
      library(ggplot2)
      library(sp)
      library(rgeos)
      dt = 
        data_frame(p10 = sample(seq(0.1,1.25,0.05), replace = TRUE, 10000),
                   p90 = sample(seq(0.25,1.75,0.05), replace = TRUE, 10000)) %>% 
        filter(p90 > p10) %>%
        mutate(p10 = log(p10), p90 = log(p90)) %>%
        mutate(index = p10/p90) %>%
        filter(abs(index) < 10) %>%
        select(index, p10, p90)
      
      dt.points = dt
      coordinates(dt.points) = ~p10 + p90
      dt.polygons = gBuffer(dt.points, width = 0.01, byid = T)
      
      dt.polygons$colour = cut(dt$index, breaks = 10, labels = F)
      
      plot(dt.polygons, col=dt.polygons$colour)
      

      【讨论】:

        猜你喜欢
        • 2016-09-16
        • 2016-01-29
        • 2015-07-08
        • 2014-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多