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

使用ggplot2优化散点图平滑线并添加数据点标注的技术问询

ggplot2散点图问题解决方案

问题说明

  1. 使用loess方法绘制的平滑拟合线效果不理想
  2. 需要为每个散点添加对应的Metric标签

数据集

Metric<-c("zero", "D", "H", "W", "P", "C", "J", "L", "N", 
          "M")
F<-c(0, 0.11, 0.26, 0.07, 0.5, 0.07, 0.26, 0.05, 0.29, 0.03)
T<-c(0, 0.5, 0.9, 0.6, 0.9, 0.5, 0.9, 0.8, 0.9, 0.8)
FinalTable<-data.frame(Metric, F, T)

解决方案

1. 优化平滑拟合线

loess的拟合效果核心受span参数影响,默认值为0.75:

  • 增大span会让拟合线更平滑
  • 减小span会让拟合线更贴近数据点
    如果loess仍达不到预期,也可以尝试method="gam"(需加载mgcv包)或多项式线性拟合。

调整loess参数示例

library(ggplot2)

ggplot(FinalTable, aes(F, T)) + 
  geom_point(size=3) + 
  coord_cartesian(xlim=c(0,1), ylim=c(0, 1))+
  # 调整span为0.9让线更平滑,若需更贴合数据可设为0.5左右
  geom_smooth(method="loess", se=FALSE, span=0.9, color="darkred")

gam方法示例

library(ggplot2)
library(mgcv)

ggplot(FinalTable, aes(F, T)) + 
  geom_point(size=3) + 
  coord_cartesian(xlim=c(0,1), ylim=c(0, 1))+
  geom_smooth(method="gam", formula = y ~ s(x), se=FALSE, color="darkblue")

2. 添加散点标签

可以用geom_text做基础标注,若担心标签重叠,推荐用ggrepel包的geom_text_repel自动调整位置。

基础标注方法

library(ggplot2)

ggplot(FinalTable, aes(F, T)) + 
  geom_point(size=3) + 
  coord_cartesian(xlim=c(0,1), ylim=c(0, 1))+
  geom_smooth(method="loess", se=FALSE, span=0.9)+
  # 微调标签位置避免覆盖散点
  geom_text(aes(label=Metric), nudge_x=0.02, nudge_y=0.02, size=4)

智能避重叠标注

先安装依赖包:

install.packages("ggrepel")

再运行绘图代码:

library(ggplot2)
library(ggrepel)

ggplot(FinalTable, aes(F, T)) + 
  geom_point(size=3) + 
  coord_cartesian(xlim=c(0,1), ylim=c(0, 1))+
  geom_smooth(method="loess", se=FALSE, span=0.9)+
  geom_text_repel(aes(label=Metric), size=4, box.padding=0.3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:15:33