Python基础篇:大模型训练基础——数据可视化(散点图)

写在前面:

计算机很呆很强大,你必须要一步一步耐心的告诉他你需要他干什么

关于数据可视化

(下文所使用的示例库为:matplotlib)

在python中,数据可视化就是简单的画图(不要被感觉很宏大其实很渺小的学术词所吓到)

因此我们已知需要画图,我们必须要让我们的计算机知道“他需要搬出画图工具”这件事,在python中如何告知呢?那就要用到我们就需要进行:

第三方库导入

import matplotlib.pyplot as plt #计算机请你拿出画图工具喔~

对第三方库导入还不熟悉的童鞋可以参考这篇:Python篇(基础):在Python导入第三方库的标准格式-CSDN博客

第三方库导入简单讲解

  • matplotlib:Python 最著名的 数据可视化库,用于绘制各种图表(折线图、散点图、柱状图等)
  • pyplot:matplotlib的核心子模块,提供 MATLAB 风格的绘图接口,并且其中还包含常用绘图函数:如plot( ),scatter( ),bar( ),show( )等等
  • as plt:为 matplotlib.pyplot 设置别名plt,为了简化代码,使得plt.函数名=matplotlib.pyplot.函数名

怎么画图呢?我们既然导入了matplotlib库,我们就可以开始画类似于折线图,散点图,柱状图等等(可不是说乱涂乱画的那个画图喔),那我们先来展示

散点图 scatter()

我们先有一个散点图的概念,这样方便我们理解其本身以及代码:

散点图的特点

我们不难发现,我们在绘图的时候需要注意的几个关键点:

双变量关系:X轴和Y轴分别表示两个变量(如自变量和因变量)

数据的特点:点的大小,颜色,形状不同

数据之间的相关性:点的分布方向显示正相关/负相关

还有一些有关于表格外表的变量:表格名称等

我们再来看散点图本身的代码:

绘画散点图的代码

plt.scatter(x, y, s, c, marker, …)

简单的,我们把plt.scatter()定义为前缀,那么后缀就是括号内的内容:

前缀的内容

plt代表我们让计算机拿出来的工具,后缀.scatter是“散”的意思,放在一起就是需要用plt工具去画散点图的意思。

后缀的内容

那些是目标散点图的具体参数,可以理解为要告诉计算机我要让他画一个什么样的散点图。

那么我们不难理解,绘图的重点在后缀那些影响图本身的参数上,下面来介绍内置参数

常用的内置参数

核心参数(绘图必备)​
​参数名​​变量类型​​功能说明​
x数组 散点的​​横坐标​​数据(必需)。
y数组 散点的​​纵坐标​​数据(必需)。
s标量或数组散点的​​大小​​(面积),默认值 20。若为数组,则每个点独立设置大小。
c颜色字符串、数组或RGB散点的​​颜色​​。可接受:<br>• 单一颜色(如 "red")<br>• 颜色数组(长度 n)<br>• RGB/RGBA 数组。
marker字符串散点的​​形状​​,如:<br>• "o":圆形(默认)<br>• "s":方形<br>• "^":三角形。

样式控制参数(改变外观)​
​参数名​​变量类型​​功能说明​
 alpha   浮点数 (0-1)散点的​​透明度​​(0 完全透明,1 不透明)。
edgecolors 颜色或字符串散点​​边缘颜色​​:<br>• "face":与填充色相同(默认)<br>• "none":无边缘。
linewidths标量或数组散点​​边缘线宽​​(单位:像素)。
cmapColormap对象​颜色映射表​​(如 "viridis"),仅当 c 为数值数组时生效。
label字符串设置​​图例标签​​(需配合 plt.legend() 使用)。

高级参数(精细化控制)​
​参数名​​变量类型​​功能说明​
normNormalize对象归一化 c 的数值范围至 [0,1],配合 cmap 使用(覆盖 vmin/vmax)。
vmin, vmax标量手动设置 c 的​​颜色映射范围​​(若 norm 存在则失效)。
plotnonfinite布尔值

是否绘制非数值点(如 NaN, inf),默认 False

如何输出图像(需要严格执行先后顺序

那么最后的问题来了:我们如何让计算机输出他绘画的图呢?

我们需要分解步骤(需要严格执行先后顺序):

1,保存图片
plt.savefig(
    'high_quality_plot.png',# 图片名称
    dpi=300,                # 提高分辨率(默认100)
    bbox_inches='tight',    # 自动去除多余白边 ✔️
    transparent=True,       # 透明背景(适合网页)
    facecolor='lightblue'   # 自定义背景色
)
2,展示图片
plt.show()  # 显示图形

ps:为什么输出不了中文的标题?可以看这篇:

Python基础篇:数据可视化的图片为什么不能输出中文?-CSDN博客

散点图与随机数的关系: 

散点图离不开随机数,为什么需要随机数?主要出于以下目的:

​模拟真实数据分布(无真实数据时)​
  • ​作用​​:当缺乏真实数据集时,随机数可生成符合特定分布(如正态分布、均匀分布)的模拟数据,用于展示散点图的基本功能。
  • ​示例​​:
    import numpy as np
    # 生成正态分布数据(均值=5,标准差=1)
    x = np.random.normal(5, 1, 1000)
    y = np.random.normal(10, 2, 1000)
    plt.scatter(x, y)
     此类数据能直观展示变量间的相关性(如线性、非线性关系)。

测试算法或模型的鲁棒性​
  • ​作用​​:在机器学习或统计分析中,需验证模型对噪声的敏感度。随机数生成的数据可添加可控噪声(如异常值),测试模型的稳定性。
  • ​案例​​:
    生成包含随机异常值的数据集,观察回归直线是否偏移,评估模型抗干扰能力。

探索数据关系(多变量场景)​
  • ​作用​​:多元回归分析中,散点图可能无法直接展示多变量间的复杂关系(如交互效应)。随机生成的数据可辅助设计实验,分离变量影响。
  • ​关键点​​:
    • 单一散点图仅能反映两个变量的关系,多变量需结合其他方法(如三维散点图或统计指标)。
    • 例如:即使 y=ax1+bx2+cx3 存在线性关系,单独画 y-x1 散点图可能显示弱相关性。


​教学与演示的可重复性​
  • ​作用​​:通过固定随机种子(如 np.random.seed(42)),确保每次生成的散点图数据一致,便于教学演示和结果复现。
  • ​代码示例​​:
    np.random.seed(0)  # 固定随机种子
    x = np.random.rand(100)
    y = np.random.rand(100)

调试与可视化优化​
  • ​作用​​:随机数据可快速验证图表自定义效果(如颜色、大小、透明度),避免因真实数据复杂而干扰调试。
  • ​常见调试项​​:
    • 点的大小(s 参数)与随机数关联:sizes = np.random.rand(100) * 100
    • 颜色映射(c 和 cmap 参数)的视觉测试

举个例子

可根据上述内容来理解下列代码:

import matplotlib.pyplot as plt
import numpy as np

# 设置随机种子保证可重现性
np.random.seed(42)

# 创建数据
n = 50  # 每组50个数据点
x1 = np.random.normal(0, 1, n)  # 组1 X值
y1 = np.random.normal(0, 1, n)  # 组1 Y值

x2 = np.random.normal(3, 1, n)  # 组2 X值
y2 = np.random.normal(3, 1, n)  # 组2 Y值

# 创建图形和坐标轴
plt.figure(figsize=(10, 7))

# 绘制第一组数据 - 用星星表示
plt.scatter(x1, y1, 
           s=120,         # 点的大小
           c='royalblue', # 颜色
           marker='*',    # 星星标记
           edgecolor='navy', # 边框颜色
           alpha=0.8,     # 透明度
           label='团队A') # 图例标签

# 绘制第二组数据 - 用圆圈表示
plt.scatter(x2, y2, 
           s=100,          # 点的大小
           c='coral',      # 颜色
           marker='o',     # 圆圈标记
           edgecolor='darkred', # 边框颜色
           alpha=0.8,      # 透明度
           label='团队B')  # 图例标签

# 添加标题和标签
plt.title('text', fontsize=16, pad=20)
plt.xlabel('Efficiency index', fontsize=12)
plt.ylabel('Quality index', fontsize=12)

# 添加图例和网格
plt.legend(fontsize=12, loc='upper left')
plt.grid(True, linestyle='--', alpha=0.3)

# 设置坐标轴范围,使两组数据都清晰可见
plt.xlim(-3, 6)
plt.ylim(-3, 6)

# 添加平均线
plt.axvline(x=np.mean(x1), color='royalblue', linestyle='--', alpha=0.3)
plt.axvline(x=np.mean(x2), color='coral', linestyle='--', alpha=0.3)

# 添加水平中线
plt.axhline(y=0, color='gray', linewidth=0.5, alpha=0.5)
plt.axvline(x=0, color='gray', linewidth=0.5, alpha=0.5)

# 显示图形
plt.tight_layout()
plt.savefig('scatter_plot.png', dpi=300,bbox_inches='tight',transparent=False)
plt.show()

生成结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值