当前位置: 首页 > news >正文

NumPy 与 Matplotlib 使用教程

Matplotlib 是 Python 主流绘图库,可与 NumPy 无缝配合(NumPy 负责生成 / 处理数据,Matplotlib 负责可视化),提供开源的 MatLab 替代方案,还支持 PyQt、wxPython 等图形工具包。本文基于菜鸟教程内容,详细讲解其安装、基础用法、核心功能及常见图表实现。

一、Matplotlib 安装

1. 主流安装方式

不同操作系统的安装命令如下,推荐使用清华 PyPI 源-i https://pypi.tuna.tsinghua.edu.cn/simple)提升下载速度:

操作系统 / 环境安装命令说明
Windows/macOS(pip3)

pip3 install matplotlib -i

https://pypi.tuna.tsinghua.edu.cn/simple

通用 pip 安装方式,需提前安装 Python3
Debian/Ubuntu(Linux)sudo apt-get install python-matplotlib基于 APT 包管理器
Fedora/Redhat(Linux)sudo yum install python-matplotlib基于 YUM 包管理器

2. 安装验证

安装后通过以下命令检查是否成功(查看 Matplotlib 版本):

pip3 list | grep matplotlib
# 示例输出:matplotlib        3.3.0(版本号可能不同)

二、基础绘图:线性图实例

Matplotlib 的pyplot子模块是绘图核心,以下是最基础的线性图案例,涵盖数据生成、图表标注、显示等流程。

1. 完整代码

import numpy as np  # 导入NumPy生成数据
from matplotlib import pyplot as plt  # 导入绘图子模块# 1. 生成数据:x为1-10的整数,y=2x+5(线性关系)
x = np.arange(1, 11)  # arange(start, end)生成[1,2,...,10]
y = 2 * x + 5# 2. 设置图表标注
plt.title("Matplotlib Demo")  # 图表标题
plt.xlabel("X Axis Caption")  # X轴标签
plt.ylabel("Y Axis Caption")  # Y轴标签# 3. 绘制线性图并显示
plt.plot(x, y)  # 绘制x与y的线性关系
plt.show()      # 弹出窗口显示图表

2. 代码解释

  • 数据生成np.arange(1,11)替代 Python 原生range,生成高效的 NumPy 数组,避免循环;
  • 标注设置title()/xlabel()/ylabel()定义图表的可读性信息,避免 “无意义图表”;
  • 绘图核心plt.plot()是基础绘图函数,默认绘制实线plt.show()触发图表渲染,必须调用才会显示。

3. 输出结果

图表为一条从(1,7)(10,25)的直线,X 轴范围 1-10,Y 轴范围 7-25,标注清晰。

三、关键问题:中文显示解决方案

Matplotlib 默认不支持中文字体,直接使用中文会显示 “方框”,需通过以下两种方法解决:

方法 1:使用开源思源黑体(跨平台)

思源黑体是 Adobe 与 Google 联合推出的免费中文字体,兼容性强,步骤如下:

  1. 下载字体

    • 官网:https://source.typekit.com/source-han-serif/cn/
    • GitHub(简体中文 OTF 格式):https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese
    • 网盘备用:https://pan.baidu.com/s/10-w1JbXZSnx3Tm6uGpPGOw(提取码:yxqu)
    • 推荐下载SourceHanSansSC-Bold.otf(粗体)。
  2. 放置字体:将下载的SourceHanSansSC-Bold.otf文件放在代码所在目录(确保路径正确)。

  3. 代码实现

import numpy as np
from matplotlib import pyplot as plt
import matplotlib.font_manager  # 导入字体管理模块# 1. 加载自定义字体(fname为字体文件路径)
zh_font = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")# 2. 生成数据
x = np.arange(1, 11)
y = 2 * x + 5# 3. 绘制图表(指定fontproperties参数启用中文)
plt.title("菜鸟教程 - 测试", fontproperties=zh_font, fontsize=14)  # 标题+字体大小
plt.xlabel("X轴", fontproperties=zh_font)
plt.ylabel("Y轴", fontproperties=zh_font)
plt.plot(x, y)
plt.show()

方法 2:使用系统自带中文字体(无需额外下载)

先查询系统已安装的中文字体名称,再直接调用,步骤如下:

  1. 查询系统中文字体
from matplotlib import pyplot as plt
import matplotlib# 打印所有已注册的字体名称
fonts = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])
for font_name in fonts:print(font_name)  # 查找包含“宋”“仿宋”“微软雅黑”等关键词的字体
  • 常见系统中文字体名称:
    • Windows:STFangsong(仿宋)、Microsoft YaHei(微软雅黑);
    • macOS:PingFang SC(苹方);
    • Linux:WenQuanYi Zen Hei(文泉驿正黑)。

    2.设置中文字体

import numpy as np
from matplotlib import pyplot as plt# 全局设置中文字体(无需每次标注都传fontproperties)
plt.rcParams['font.family'] = ['STFangsong']  # 替换为查询到的字体名称
plt.rcParams['font.size'] = 12  # 可选:全局设置字体大小# 后续绘图代码与基础案例一致,中文可正常显示
x = np.arange(1, 11)
y = 2 * x + 5
plt.title("菜鸟教程 - 测试")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.plot(x, y)
plt.show()

四、核心参数:线型、标记与颜色

plt.plot()支持通过格式字符串(如"ob")快速设置线型、标记样式和颜色,格式为[颜色][标记][线型](顺序可调整,部分参数可省略)。

1. 线型与标记样式(常用)

格式字符描述类型
--实线(默认)线型
--短横线线型
-.点划线线型
:虚线线型
.点标记标记
o圆标记标记
v倒三角标记标记
^正三角标记标记
s正方形标记标记
*星形标记标记
+加号标记标记
xX 形标记标记

2. 颜色缩写(常用)

格式字符颜色
b蓝色
g绿色
r红色
c青色
m品红色
y黄色
b黑色
w白色

3. 实例:散点图(圆标记 + 蓝色)

将线性图改为散点图,只需将plt.plot(x,y)改为plt.plot(x,y,"ob")o= 圆标记,b= 蓝色):

import numpy as np
from matplotlib import pyplot as pltx = np.arange(1, 11)
y = 2 * x + 5
plt.title("Matplotlib Demo (Scatter)")
plt.xlabel("X Axis")
plt.ylabel("Y Axis")
plt.plot(x, y, "ob")  # 蓝色圆标记散点图
plt.show()

输出结果:X 轴 1-10 的位置显示蓝色圆点,无连接线,清晰展示离散数据点。

五、常见图表类型实战

1. 正弦波图(连续数据可视化)

利用 NumPy 生成正弦函数数据,Matplotlib 绘制平滑曲线:

import numpy as np
from matplotlib import pyplot as plt# 1. 生成数据:x范围0~3π,步长0.1(步长越小曲线越平滑)
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)  # 计算正弦值# 2. 绘图
plt.title("Sine Wave Form")
plt.xlabel("X (0~3π)")
plt.ylabel("Y (sin(x))")
plt.plot(x, y, "r-", linewidth=2)  # 红色实线,线宽2
plt.show()

输出结果:振幅为[-1,1]的正弦曲线,覆盖 0 到 3π(约 9.42)的 X 范围,曲线平滑连续。

2. 子图(subplot ()):同一窗口多图表

subplot(行数, 列数, 当前子图索引)可在同一窗口划分多个子图,索引从 1 开始。以下实例同时绘制正弦和余弦曲线:

import numpy as np
from matplotlib import pyplot as plt# 1. 生成数据(正弦和余弦共用X轴)
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)  # 正弦数据
y_cos = np.cos(x)  # 余弦数据# 2. 创建子图1(2行1列,第1个图)
plt.subplot(2, 1, 1)
plt.plot(x, y_sin, "g-")
plt.title("Sine Wave")  # 子图1标题# 3. 创建子图2(2行1列,第2个图)
plt.subplot(2, 1, 2)
plt.plot(x, y_cos, "b-")
plt.title("Cosine Wave")  # 子图2标题# 4. 调整子图间距(避免标题与图表重叠)
plt.tight_layout()
plt.show()

输出结果:窗口分为上下两部分,上为绿色正弦曲线,下为蓝色余弦曲线,各自有标题,布局紧凑。

3. 条形图(bar ()):离散数据对比

plt.bar(x, height, color, align)用于绘制条形图,适合对比多组离散数据:

from matplotlib import pyplot as plt# 1. 两组对比数据
x1 = [5, 8, 10]  # 第一组条形的X轴位置
y1 = [12, 16, 6] # 第一组条形的高度
x2 = [6, 9, 11]  # 第二组条形的X轴位置
y2 = [6, 15, 7]  # 第二组条形的高度# 2. 绘制两组条形图
plt.bar(x1, y1, align="center", label="Group A")  # 默认颜色,添加图例标签
plt.bar(x2, y2, color="g", align="center", label="Group B")  # 绿色,图例标签# 3. 设置标注与图例
plt.title("Bar Graph (Group Comparison)")
plt.xlabel("X Axis")
plt.ylabel("Y Axis (Value)")
plt.legend()  # 显示图例(基于label参数)
plt.show()

输出结果:X 轴范围 5-11,两组条形居中对齐,Group A 为默认色,Group B 为绿色,图例清晰区分两组数据。

4. 直方图(histogram):数据分布可视化

直方图用于展示数据的频率分布,需先通过numpy.histogram()计算频率,再用plt.hist()绘图。

步骤 1:计算频率分布(numpy.histogram ())
import numpy as np# 1. 原始数据(15个随机整数)
a = np.array([22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27])# 2. 定义 bins(区间边界):[0,20), [20,40), [40,60), [60,80), [80,100]
bins = [0, 20, 40, 60, 80, 100]# 3. 计算频率(hist)和区间(bins)
hist, bins = np.histogram(a, bins=bins)# 4. 打印结果
print("频率分布(每个区间的数据个数):", hist)  # 输出:[3 4 5 2 1]
print("区间边界:", bins)                      # 输出:[  0  20  40  60  80 100]
  • 解释:[0,20)区间有 3 个数据(5,11,20),[20,40)有 4 个数据(22,31,27),以此类推。
步骤 2:绘制直方图(plt.hist ())
import numpy as np
from matplotlib import pyplot as plta = np.array([22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27])
bins = [0, 20, 40, 60, 80, 100]# 绘制直方图
plt.hist(a, bins=bins, color="orange", edgecolor="black")  # 橙色柱体,黑色边框
plt.title("Histogram (Data Distribution)")
plt.xlabel("Value Range")
plt.ylabel("Frequency (Count)")
plt.show()

输出结果:X 轴为区间[0,100],Y 轴为频率(0-5),橙色柱体高度对应每个区间的数据个数,边框清晰区分柱体。

六、补充:常用全局设置

除了上述功能,可通过plt.rcParams设置全局绘图样式,避免重复代码:

import matplotlib.pyplot as plt# 1. 全局中文字体
plt.rcParams['font.family'] = ['Microsoft YaHei']
# 2. 全局字体大小
plt.rcParams['font.size'] = 12
# 3. 图表标题大小
plt.rcParams['axes.titlesize'] = 14
# 4. 轴标签大小
plt.rcParams['axes.labelsize'] = 12
# 5. 图例大小
plt.rcParams['legend.fontsize'] = 10
# 6. 线条宽度
plt.rcParams['lines.linewidth'] = 2

七、总结

Matplotlib 与 NumPy 的配合是 Python 数据可视化的基础,核心能力包括:

  1. 数据生成:NumPy 的arange()sin()cos()等函数高效生成绘图数据;
  2. 基础绘图:线性图、散点图、正弦波图,通过plot()参数控制样式;
  3. 多图表布局subplot()实现同一窗口多子图;
  4. 离散 / 分布可视化:条形图(bar())对比离散数据,直方图(hist())展示分布;
  5. 中文支持:通过自定义字体或系统字体解决中文显示问题。

感谢大家的阅读 制作不易 麻烦各位点点关注和收藏 每天8点持续更新!!!

http://www.dtcms.com/a/521051.html

相关文章:

  • 如何做网站百科房地产销售述职报告
  • 做多语言网站教程建筑工程网络计划技术与应用
  • 微软Agent Framework
  • 上海app网站建设雷山网站快速排名
  • 深度学习基础:Tensor(张量)的创建方法详解
  • HTML5基础——18、CSS滤镜
  • 从零开始的C++学习生活 13:红黑树全面解析
  • RealVNC Viewer(Windows控制Mac)
  • mac下载wget
  • SQL进阶:深入解析SQL执行顺序
  • 专业网站建设的公司哪家好合肥计算机培训机构
  • C#实现摄像头视频录制与保存
  • 东莞网站建没可信网站是什么意思
  • led行业网站源码wordpress会员查看发布插件
  • 网站建设前期需要干嘛许昌网站建设哪家最好
  • 【Linux学习笔记】基于阻塞队列和环形队列的生产者消费者模型
  • GAN生成对抗网络学习-例子:生成逼真手写数字图
  • WPF MVVM下 ItemsControl条目命令绑定传参
  • 贵州网站制作公司电话wordpress有留言时邮件提醒
  • Python 脚本在工作日(周一到周五)的 8:00 到 19:00 之间持续运行,并在其他时间暂停(延时)
  • 婚庆网站大全深圳企业网站制作公司查询
  • 当城市有了“空间智能体”:一座长江首城的智慧蝶变
  • 机械类做的最好的网站网站开发代理江苏
  • 让别人做网站图片侵权网站简易后台
  • seo针对网站做策划大型网站开发合同
  • Macao资料生成程序,全新的UI 三端自适应PHP空间
  • 1Panel 安装与使用全指南:从部署到实战运维
  • Katalon Studio自愈测试功能
  • 非java、python、c/c++、perl、php、sql等的文章
  • 企业网站的建设与应用开题报告自己搭建app