You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言如何绘制经Effort校正的物种观测趋势图并解决过绘制问题

大型公民科学数据集校正努力值绘图过绘制解决方案

geom_jitter()过绘制是百万级以上观测点可视化的常见问题,以下是经实际场景验证的可行方案,按需选择即可:

  • 低透明度散点+密度层方案(适配需要保留原始点分布的场景)
    直接调整散点透明度、点大小和抖动宽度,叠加二维密度层高亮高密度聚集区,不需要提前聚合数据:

    library(ggplot2)
    ggplot(data = Effort_final, aes(x = year, y = adj_effort)) +
      geom_jitter(alpha = 0.04, size = 0.7, width = 0.2) +
      geom_density_2d_filled(alpha = 0.3, show.legend = FALSE) +
      scale_x_continuous(breaks = seq(floor(min(Effort_final$year)), ceiling(max(Effort_final$year)), 2)) +
      labs(x = "Year", y = "Adjusted annual observation count")
    

    参数说明:alpha设为0.03-0.06区间时,重叠次数越高的区域颜色越深,能自然呈现观测值的集中区间;width控制年份轴抖动幅度,避免点偏离对应年份太远。

  • 年度分位聚合趋势图(适配需要清晰展示年际变化核心趋势的场景)
    提前按年份聚合计算观测值的分位数,用区间带+中位线展示分布,完全消除过绘制:

    library(dplyr)
    year_agg <- Effort_final %>%
      group_by(year) %>%
      summarise(
        median_val = median(adj_effort, na.rm = TRUE),
        q25 = quantile(adj_effort, 0.25, na.rm = TRUE),
        q75 = quantile(adj_effort, 0.75, na.rm = TRUE),
        q10 = quantile(adj_effort, 0.1, na.rm = TRUE),
        q90 = quantile(adj_effort, 0.9, na.rm = TRUE)
      )
    
    ggplot(year_agg, aes(x = year)) +
      geom_ribbon(aes(ymin = q10, ymax = q90), fill = "#2c7fb8", alpha = 0.2) +
      geom_ribbon(aes(ymin = q25, ymax = q75), fill = "#2c7fb8", alpha = 0.4) +
      geom_line(aes(y = median_val), color = "#253494", linewidth = 1) +
      labs(x = "Year", y = "Adjusted annual observation count")
    

    图中深色带覆盖50%的观测值区间,浅色带覆盖80%的观测值区间,深色线为年度校正值中位数,年际上升/下降趋势可直接读取。

  • 六边形分箱图(适配千万行级超大数据集场景)
    用六边形分箱替代散点,按格内观测数填色,渲染速度比散点快10-100倍,不会出现过绘制:

    ggplot(data = Effort_final, aes(x = year, y = adj_effort)) +
      geom_hex(bins = c(length(unique(Effort_final$year))*2, 50)) +
      scale_fill_viridis_c(trans = "log10", name = "Observation count") +
      labs(x = "Year", y = "Adjusted annual observation count")
    

    色阶做对数转换是为了避免少数极高值格点压缩整体色阶范围,能同时展示高密度和低密度区域的分布。

额外提示:如果需要展示不同类群(taxon_name)的趋势差异,直接在上述代码末尾添加facet_wrap(~taxon_name, scales = "free_y")分面绘制即可,不要把所有类群的点叠加在同一个面板中。

内容的提问来源于stack exchange,提问作者Kevin Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:36:28