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

如何将散点图中的点替换为无点平滑线?需用predict实现1/x曲线

用predict实现不带点的1/x平滑曲线

核心思路

1/x曲线可以转化为线性模型(形式为 ( y = a + b \times \frac{1}{x} )),先拟合这个模型,再用密集的x序列预测y值,就能得到平滑线条,全程不用显示原始数据点。


R语言实现步骤

  1. 拟合1/x模型
    假设你的数据存储在数据框df中,包含x和y列:

    # 拟合y ~ 1/x的线性模型,I()用来保留1/x的原始形式
    model <- lm(y ~ I(1/x), data = df)
    
  2. 生成密集的x序列
    为了得到平滑线条,需要生成覆盖原始x范围的密集点:

    # 从x的最小值到最大值生成100个均匀分布的点
    new_x <- seq(min(df$x), max(df$x), length.out = 100)
    
  3. 预测对应y值
    用拟合好的模型对新x序列预测,注意构造符合模型要求的新数据框:

    new_df <- data.frame(x = new_x)
    predicted_y <- predict(model, newdata = new_df)
    
  4. 绘制平滑线条
    用ggplot2或基础绘图只画线条,不显示原始点:

    # ggplot2示例
    library(ggplot2)
    ggplot() +
      geom_line(aes(x = new_x, y = predicted_y), color = "blue", linewidth = 1) +
      labs(x = "X轴", y = "Y轴")
    
    # 基础绘图示例
    plot(new_x, predicted_y, type = "l", col = "blue", lwd = 1, xlab = "X轴", ylab = "Y轴")
    

Python语言实现步骤

用scikit-learn拟合模型,matplotlib绘图:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

# 替换成你的原始x、y数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1, 0.5, 0.33, 0.25, 0.2])

# 将x转换为1/x的形式,适配线性模型
x_transformed = 1 / x.reshape(-1, 1)

# 拟合线性模型
model = LinearRegression()
model.fit(x_transformed, y)

# 生成密集x序列
new_x = np.linspace(min(x), max(x), 100).reshape(-1, 1)
new_x_transformed = 1 / new_x

# 预测y值
predicted_y = model.predict(new_x_transformed)

# 绘制平滑线
plt.plot(new_x, predicted_y, color='blue', linewidth=1)
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:31:12