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

ggplot2 geom_density:密度图百分比显示及图例标记形状修改问题

解决方案

1. 修正y轴百分比显示

geom_density默认的y轴是密度值,直接转百分比会导致数值失真(密度≠比例)。需要将y轴映射为区间观测比例后,再用百分比标签。

2. 修复图例形状不生效问题

geom_density的图例默认是线条元素,需通过override.aes强制覆盖美学属性,指定形状和大小。


完整可运行代码

library(ggplot2)
library(scales)

ggplot(iris, aes(x = Sepal.Length, color = Species)) +
  # 将y轴映射为区间观测比例(密度×区间宽度)
  geom_density(aes(y = after_stat(density * width)), linewidth = 1) +
  # 转换y轴为百分比,强制从0起始避免分布压缩
  scale_y_continuous(labels = percent, limits = c(0, NA)) +
  # 修改图例列数,强制设置实心圆标记
  guides(
    color = guide_legend(
      ncol = 2,
      override.aes = list(shape = 19, size = 3, linewidth = 0) # linewidth=0隐藏图例线条,仅保留形状
    )
  ) +
  theme_minimal()

关键细节说明

  • y轴修正逻辑:density * width计算的是每个区间内的观测数占总样本的比例,总和为1,此时用percent标签就能正确显示0-100%的范围;limits = c(0, NA)确保y轴从0起始,避免视觉上的分布压缩。
  • 图例修正逻辑:override.aes是强制修改图例元素的核心参数,shape=19指定实心圆,size=3放大标记让其更清晰;如果需要保留图例中的线条,去掉linewidth=0即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 03:35:16