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

如何在R的多元回归图中整洁标注线条且避免重叠?

解决回归线标注重叠问题
  • 核心问题:你当前用geom_text直接映射原始数据,每个数据点都会生成标签,导致重复和混乱。需要为每条回归线单独生成一个标签,放在线条左侧。
  • 解决步骤:
    1. 按国家分组计算回归模型,获取回归线左侧(x最小值处)的对应坐标作为标签位置
    2. 使用ggrepel包的自动避重文本函数,替代原生geom_text
    3. 确保标签颜色与回归线对应,优化位置参数

修改后代码

首先安装并加载辅助包(若未安装):

install.packages("ggrepel")
library(ggrepel)

处理数据并绘图:

# 计算每个国家回归线左侧的标签位置
label_data <- urban %>%
  group_by(CTR_MN_NM) %>%
  summarise(
    x_label = min(log10(B15)), # 取每个国家x轴最小值(线条最左端)
    # 用回归模型计算对应x位置的y值,保证标签在回归线上
    y_label = predict(lm(log10(E_GR_AH14) ~ log10(B15), data = cur_data()), 
                      newdata = data.frame(B15 = 10^x_label))
  )

# 绘制图形
Fig1a <- urban %>%
  ggplot(aes(x = log10(B15), y = log10(E_GR_AH14), color = CTR_MN_NM)) +
  geom_smooth(method = "lm", se = FALSE, fullrange = FALSE) +
  geom_abline(intercept = 0, slope = 1, color = "black", size = 1) +
  labs(y="log Total High Greenness km2", x="log Total Built Area km2", 
       title = "Total Built Area vs. Total High Greenness") +
  scale_color_manual(values = c("Argentina"="#fb6542",
                                "Australia"="#3f681c",
                                "Brazil"="#fb6542",
                                "Canada"="#fb6542",
                                "Germany"="#3f681c",
                                "France"="#3f681c",
                                "United Kingdom"="#fb6542",
                                "Indonesia"="#fb6542",
                                "India"="#3f681c",
                                "Nigeria"="#3f681c",
                                "United States"="#375E97",
                                "South Africa"="#3f681c",
                                "Japan"="#3f681c",
                                "Mexico"="#375E97",
                                "Russia"="#3f681c",
                                "Ukraine"="#375E97",
                                "Bangladesh"="#fb6542",
                                "China"="#375E97"))+ 
  theme_minimal() +
  # 自动避重的标签,固定在回归线左侧
  geom_text_repel(data = label_data, 
                  aes(x = x_label, y = y_label, label = CTR_MN_NM),
                  nudge_x = -0.1, # 向左微调,确保在线条左侧
                  direction = "y", # 仅允许垂直方向调整位置,避免横向混乱
                  segment.color = NA, # 移除标签与回归线的连接线
                  show.legend = FALSE) # 不显示标签图例

补充说明

  • 若仍有少量重叠,可调整nudge_x数值,或添加force = 1.5参数增大标签间的推离力度
  • label_data确保每个国家仅生成一个标签,从根源解决重复问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:20:05