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

R语言绘制地图时点大小显示非整数问题求助

解决ggplot地图中点大小刻度显示小数的问题

问题原因

你的count字段是数值型变量,ggplot默认会使用连续尺度处理,因此会生成过渡性的小数刻度和点大小,不符合你需要的仅显示1和2的需求。

解决方案

有两种常用方法可以强制显示离散的1、2刻度,并让点大小严格对应这两个值:


方法1:将count转换为因子类型

把count转为因子,让ggplot识别为离散变量,自动只显示1和2的刻度:

# 先处理坐标格式(原数据用逗号做小数点,需转换为数值型)
rpat2$X <- as.numeric(gsub(",", ".", rpat2$X))
rpat2$Y <- as.numeric(gsub(",", ".", rpat2$Y))

rnaturalearth::ne_countries(scale = "medium", returnclass = "sf") %>% 
  ggplot() +
  geom_sf() + 
  coord_sf(xlim = c(-10, 5), ylim = c(36, 44), expand = FALSE) +
  geom_point(data = rpat2,
             aes(x = X, y = Y, colour = style, size = factor(count)),
             na.rm = TRUE) +
  # 指定刻度标签和点大小范围(range参数可按需调整)
  scale_size_discrete(breaks = c("1", "2"), 
                      labels = c("1", "2"), 
                      range = c(2, 4)) +
  theme_minimal() + 
  xlab(NULL) + 
  ylab(NULL)

方法2:使用连续尺度强制指定刻度

保持count为数值型,通过scale_size_continuous限制刻度和大小范围:

# 先处理坐标格式
rpat2$X <- as.numeric(gsub(",", ".", rpat2$X))
rpat2$Y <- as.numeric(gsub(",", ".", rpat2$Y))

rnaturalearth::ne_countries(scale = "medium", returnclass = "sf") %>% 
  ggplot() +
  geom_sf() + 
  coord_sf(xlim = c(-10, 5), ylim = c(36, 44), expand = FALSE) +
  geom_point(data = rpat2,
             aes(x = X, y = Y, colour = style, size = count),
             na.rm = TRUE) +
  # 强制仅显示1和2的刻度,设置点大小范围
  scale_size_continuous(breaks = c(1, 2), 
                        limits = c(1, 2), 
                        range = c(2, 4)) +
  theme_minimal() + 
  xlab(NULL) + 
  ylab(NULL)

关键说明

  • 坐标转换:原数据中X和Y列使用逗号作为小数点分隔符,必须先转换为R可识别的数值型,否则无法正确绘制点。
  • 点大小调整:两种方法中的range参数可以自定义1和2对应的点大小(比如c(2,4)代表count=1时大小为2,count=2时为4),可根据可视化需求修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:45:21