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

求助:ggplot气泡图大小映射坐标点出现频率的实现方法

解决ggplot气泡图大小映射频率的问题

问题根源

你的代码存在两个核心问题:

  • 拼写错误:freqency应为frequency,但更关键的是ggplot无法直接在aes()中调用frequency()函数,aes()只能引用数据框中的列或ggplot内置的统计量(需用..包裹)。
  • 未结合声音类型的分组逻辑,会导致频率统计忽略声音类型维度,不符合你用颜色区分声音的需求。

解决方案一:用stat_count自动统计频率

无需提前处理数据,直接通过stat="count"让ggplot自动计算每个(熟悉度, 意愿, 声音类型)组合的出现次数,再将气泡大小映射到这个统计值:

ggplot(dd, aes(x = familiar_place, y = commit3, color = voice_type)) +
  # 使用stat="count"自动计数,size映射到内置统计量..count..
  geom_point(stat = "count", aes(size = ..count..)) +
  # 自定义大小图例名称
  scale_size_continuous(name = "出现频率") +
  # 自定义坐标轴和颜色图例名称
  labs(x = "熟悉度等级", y = "节水意愿等级", color = "声音类型")

解决方案二:提前手动汇总数据(更直观可控)

先用dplyr包汇总每个组合的出现次数,再基于汇总后的数据绘图,逻辑更清晰,也方便后续对数据做额外调整:

# 加载dplyr包(如果没安装先运行install.packages("dplyr"))
library(dplyr)

# 汇总每个(熟悉度, 意愿, 声音类型)组合的出现次数,命名为freq
dd_summary <- dd %>%
  count(familiar_place, commit3, voice_type, name = "freq")

# 基于汇总数据绘图
ggplot(dd_summary, aes(x = familiar_place, y = commit3, color = voice_type, size = freq)) +
  geom_point() +
  scale_size_continuous(name = "出现频率") +
  labs(x = "熟悉度等级", y = "节水意愿等级", color = "声音类型")

注意事项

  • 确保你的数据框dd中存在存储声音类型(成人/儿童)的列(示例中用voice_type,若实际列名不同,替换成对应名称即可)。
  • 若想调整气泡大小的范围,可以在scale_size_continuous()中添加range = c(2, 10)这类参数,自定义最小和最大气泡尺寸。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:05:46