R语言绘图,分组添加拟合线,单独标注拟合函数和R2

本文介绍如何使用R语言的ggplot2包绘制不同物种的萼片长度与宽度的关系图,并通过添加拟合直线、拟合函数及R²值来增强图表的信息量。此外,还介绍了如何自定义位置添加文本标签以避免与数据点重叠。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

R语言绘图,分组添加拟合直线,并标注拟合函数和R2,实现分面后的数据单独自由的标注

#查看数据
head(iris)
str(iris)

对不同物种(Species)的萼片长度(Sepal. Length)与宽度(Sepal. Width)作

#加载包
library(ggplot2)
#绘图
ggplot(iris,aes(Sepal.Width,Sepal.Length))+
geom_point()+
stat_smooth(method=lm, level=0.99)+
#facet_wrap(~Species)#不同物种进行分面,共用一个y轴
facet_wrap(~Species,scales="free")#不同物种进行分面,scales="free"坐标轴独立自由

 

#加载包
library(ggpmisc)
#绘图
#加入拟合函数和R2
ggplot(iris,aes(Sepal.Width,Sepal.Length,color=Species))+
geom_point()+
stat_smooth(method=lm, level=0.99)+
facet_wrap(~Species,scales="free")+
stat_poly_eq(
    aes(label =paste(..eq.label.., ..adj.rr.label.., sep = '~~')),
    formula = y ~ x,  parse = TRUE,
      family="serif",
      size = 3.6,
      color="black",
      label.x = 0.1,  #0-1之间的比例确定位置
      label.y = 1)

我们发现拟合公式与数据点之间有重叠,想自己在随意为之上加拟合公式的标注

#设定标注的文本
data_text<-data.frame(label=c(1,2,3),
Species=c("setosa","versicolor","virginica"),
x=c(2.5,2.5,2.2),y =c(5.8,6.8,7.5))#确定每个分面(Species)内文字(label)的位置(x,y)
#为每个分面自由添加文字
ggplot(iris,aes(Sepal.Width,Sepal.Length,color=Species))+
geom_point()+
stat_smooth(method=lm, level=0.99)+
facet_wrap(~Species,scales="free")+
geom_text(data=data_text,mapping=aes(x=x,y=y,label=label),nudge_x=0.1,nudge_y=0.1,color="purple")

划重点:为什么我用1,2,3代替的公式,因为我不会同时输入:y=2.64+0.69x {R}^{2}=0.54,求走过路过的大佬赐教,我expression没弄明白。

### 绘制带R方值的散点拟合图 为了在Python中创建带有决定系数\( R^2 \)值的散点拟合图,可以利用`matplotlib`来处理图形展示部,而使用`numpy``sklearn`来进行数据处理以及模型评估。下是一个具体的实现方案。 首先,加载必要的库: ```python import numpy as np from sklearn.linear_model import LinearRegression from sklearn.metrics import r2_score import matplotlib.pyplot as plt ``` 准备用于绘图的数据集,并构建线性回归模型以获取预测值与实际值之间的关系[^1]。 接着定义函数用来计算并显示\( R^2 \),同时绘制原始数据点及其对应的拟合线: ```python def plot_regression_with_r_squared(x_data, y_true): # 创建线性回归对象 model = LinearRegression() # 训练模型 x_reshaped = x_data.reshape(-1, 1) model.fit(x_reshaped, y_true) # 预测y值 y_pred = model.predict(x_reshaped) # 获取r&sup2;数 score = r2_score(y_true, y_pred) # 开始画图 fig, ax = plt.subplots(figsize=(8, 6)) ax.scatter(x_data, y_true, color='blue', label="Data points") # 原始数据点 # 添加最佳拟合线 ax.plot(x_data, y_pred, color='red', linewidth=2, label=f'Fitted line ($R^2$={score:.3f})') # 设置图表属性 ax.set_xlabel('X-axis') ax.set_ylabel('Y-axis') ax.legend(loc='best') plt.show() # 示例调用此函数 x_example = np.random.rand(50)*100 y_example = 2*x_example + np.random.randn(*x_example.shape)*10 plot_regression_with_r_squared(x_example, y_example) ``` 上述代码片段展示了如何通过给定的一组输入特征(`x`)目标变量(`y`)来训练一个简单的线性回归模型,并基于该模型得到的结果,在散点图上叠加一条代表趋势的最佳拟合线,同时还标注了此次拟合所获得的\( R^2 \)得作为衡量标准之一[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值