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

如何为ggplot绘制的空间气泡图自定义图例?

嘿,我来帮你搞定ggplot空间气泡图的自定义图例问题!先把你的代码补全成可运行的版本(假设shp是你已经读入的空间多边形数据),再一步步给你讲各种实用的自定义技巧:

先搞定基础可运行代码
library(ggplot2)
# 固定随机种子让结果可复现
set.seed(123)
df <- data.frame(sim = sample((20:30),10), obs = sample(25:40,10), long = rnorm(10,10,8), lat = rnorm(10,30,15))
# 这里用一个简单的示例多边形代替你的shp数据(实际替换成你自己的空间数据即可)
shp <- data.frame(long = c(5,15,15,5), lat = c(20,20,40,40), group = 1)

# 你的基础气泡图完整代码
p <- ggplot() +
  geom_polygon(data = shp, aes(x = long, y = lat, group = group), 
               col = "black", lwd = 0.8, fill = "slategray1", alpha = 0.5) +
  geom_point(data = df, aes(x = long, y = lat, size = sim), 
             col = "darkorange", alpha = 0.7) +
  coord_cartesian()
p
常见图例自定义需求实现

1. 改标题、加单位,让图例更易懂

默认图例标题是sim,可以改成更直观的名称,还能给刻度标签加单位:

p +
  labs(size = "模拟值") + # 替换默认的图例标题
  scale_size_continuous(labels = function(x) paste0(x, " 单位")) # 给每个刻度标签加上单位

2. 手动控制气泡大小范围

默认的气泡大小可能不符合你的可视化需求,你可以自己定义最小和最大气泡的尺寸:

p +
  scale_size_continuous(
    limits = c(20, 30), # 限定数值范围(和你的sim数据区间匹配)
    range = c(2, 10)    # 设置气泡的最小/最大尺寸,单位是mm
  )

3. 结合观测值做颜色映射,合并图例更协调

如果想同时用气泡大小表示sim、颜色表示obs,可以这样调整图例让它更美观:

# 先画出带颜色映射的图
p_col <- ggplot() +
  geom_polygon(data = shp, aes(x = long, y = lat, group = group), 
               col = "black", lwd = 0.8, fill = "slategray1", alpha = 0.5) +
  geom_point(data = df, aes(x = long, y = lat, size = sim, color = obs), 
             alpha = 0.7) +
  coord_cartesian()

# 自定义图例样式
p_col +
  labs(size = "模拟值", color = "观测值") + # 分别设置两个图例的标题
  scale_color_viridis_c(option = "plasma") + # 用更友好的viridis渐变配色
  scale_size_continuous(range = c(3, 12)) +
  theme(legend.box = "horizontal") # 让两个图例横向排列,节省空间

4. 调整图例位置和外观

想把图例放到图外(比如底部),或者给图例加边框、改文字样式?看这里:

p +
  labs(size = "模拟值") +
  theme(
    legend.position = "bottom", # 图例位置可选:bottom/top/left/right,也可以用自定义坐标c(0.8,0.2)
    legend.box.background = element_rect(color = "black", fill = "white"), # 给图例加边框和白色背景
    legend.title = element_text(size = 12, face = "bold"), # 加粗标题并调整字号
    legend.text = element_text(size = 10) # 调整图例标签的字号
  )

5. 隐藏多余的图例

如果底图不小心生成了多余的图例(一般不会,但以防万一),可以手动隐藏:

p + guides(fill = "none", color = "none") # 按需隐藏不需要的图例类型

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:19:12