【python】Matplotlib库学习笔记
Matplotlib 是 python 的绘图库。
以下内容主要介绍 Matplotlib 的子库 pyplot。pyplot 是常用的2D绘图模块,包含一系列绘图相关函数。
plot()函数
plot() 函数可以用来绘制点和线。
import matplotlib.pyplot as plt
'''
x: X轴数据,列表或数组,可选。省略x则y的下标作为x
y: Y轴数据,列表或数组
format_string: 控制曲线的格式字符串,可选
**kewargs: 通过关键字参数设置指定属性,如线的宽度,颜色等
当绘制多条曲线时,各条曲线的x不能省略
'''
# 绘制单条线
plt.plot(x, y, format_sting, **kwargs)
# 绘制多条线
plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)
format_sting
由颜色字符、风格字符和标记字符组成。
常用的颜色字符:
颜色字符 | 说明 | 颜色字符 | 说明 |
---|---|---|---|
'b' |
蓝色 | 'm' |
洋红色magenta |
'g' |
绿色 | 'y' |
黄色 |
'r' |
红色 | 'k' |
黑色 |
'c' |
青绿色cyan | 'w' |
白色 |
'#008000' |
RGB某颜色 | '0.8' |
灰度值字符串 |
常用的风格字符:
风格字符 | 说明 |
---|---|
'-' |
实线 |
'--' |
破折线 |
'-.' |
点划线 |
':' |
虚线 |
"" |
无线条 |
标记字符表明数据点的标记风格,常用的标记字符:
标记字符 | 说明 | 标记字符 | 说明 | 标记字符 | 说明 |
---|---|---|---|---|---|
'.' |
点标记 | '1' |
下花三角标记 | 'h' |
竖六边形标记 |
',' |
像素标记(极小点) | '2' |
上花三角标记 | 'H' |
横六边形标记 |
'o' |
实心圈标记 | '3' |
左花三角标记 | '+' |
十字标记 |
'v' |
倒三角标记 | '4' |
右花三角标记 | 'x' |
x标记 |
'^' |
上三角标记 | 's' |
实心方形标记 | 'D' |
菱形标记 |
'>' |
右三角标记 | 'p' |
实心五角标记 | 'd' |
瘦菱形标记 |
'<' |
左三角标记 | '*' |
星形标记 | `' | '` |
eg:
# eg 假设有数组a,b,c,d
plt.plot(a) #数据点坐标是 (i,a[i])
plt.plot(a, b) # 数据点坐标是 (a[i],b[i])
plt.plot(a, b, c, d) # 第一条曲线数据点坐标是(a[i],b[i]),第二条曲线数据点坐标是(c[j],d[j])
plt.plot(a, 'go-') # 绿色,实心圈标记,实线
除了使用format_string控制曲线格式,还可以用关键字参数控制:
color
:控制颜色linestyle
:线条风格marker
:标记风格markerfacecolor
:标记颜色markersize
:标记尺寸- ...
中文显示
pyplot 不默认支持中文显示。有两种方法可以实现中文显示,推荐使用第二种,避免改变全局字体样式。
第一种方法:使用 rcParams
修改字体实现
rcParams 属性 |
说明 |
---|---|
font.family |
字体样式。黑体'SimHei' 、楷体'Kaiti' 、隶书'Lisu' 、仿宋'FangSong' 、幼圆'Youyuan' 、华文宋体'STSong' |
font.style |
字体风格。正常'normal' 或斜体'italic' |
font.size |
字体大小。整数字号或'large' 、x-small |
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei' # 修改字体样式为黑体
matplotlib.rcParams['font.size'] = 20 # 修改字体大小为20
matplotlib.rcParams['font.style'] = 'italic' # 修改字体风格为斜体
plt.plot([3, 1, 4, 5, 2])
plt.ylabel("纵轴")
plt.show()
注:这种方法改变的是全局的字体。
第二种方法:在有中文输出的地方增加一个属性:fontproperties
plt.ylabel("横轴", fontproperties = 'SimHei', fontsize = 20, color = 'green')
文本显示
常用的文本显示函数:
函数 | 说明 |
---|---|
plt.xlabel() |
对X轴增加文本标签 |
plt.ylabel() |
对Y轴增加文本标签 |
plt.title() |
对图形整体增加文本标签 |
plt.text() |
在任意位置增加文本 |
plt.annotate() |
在图形中增加带箭头的注解 |
import numpy as np
import matplotlib.pyplot as plt
a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.xlabel('横轴:时间', fontproperties='SimHei', fontsize=25, color='green')
plt.ylabel('纵轴:振幅', fontproperties='SimHei', fontsize=25)
plt.title(r'正弦波实例 $y=cos(2\pi x)$', fontproperties='SimHei', fontsize=25) # $...$为LaTeX的行内公式编辑
plt.text(2, 1, r'$\mu=100$', fontsize=15) # 在坐标(2,1)处增加文本
# 在坐标(2,1)处增加箭头,(3,1.5)处增加文本
plt.annotate(r'$\mu=100$', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.1, width=2))
plt.axis([-1, 6, -2, 2])
plt.grid(True)
plt.show()
子绘图区域
.subplot()/.subplots()
plt.subplot(nrows, ncols, index)
以上函数将整个绘图区域分成 nrows 行和 ncols 列,然后从左到右,从上到下的顺序对每个子区域进行编号 1...N ,左上的子区域的编号为 1、右下的区域编号为 N,编号可以通过参数 index 来设置。
def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
a = np.arange(0.0, 5.0, 0.02)
plt.subplot(211)
plt.plot(a, f(a),a, np.cos(2*np.pi*a),'r--')
plt.title("plot 1")
plt.subplot(2,1,2)
plt.plot(a, np.cos(2*np.pi*a),'r--1')
plt.xlabel("x轴")
plt.title("plot 2")
plt.suptitle("subplot Test")
plt.show()
subplot() 方法在绘图时需要指定位置,subplots() 方法可以一次生成多个,在调用时只需要调用生成对象的 ax 即可。
'''
nrows:默认为 1,设置图表的行数。
ncols:默认为 1,设置图表的列数。
sharex、sharey:设置 x、y 轴是否共享属性,默认为 false,可设置为 'none'、'all'、'row' 或 'col'。 False 或 none 每个子图的 x 轴或 y 轴都是独立的,True 或 'all':所有子图共享 x 轴或 y 轴,'row' 设置每个子图行共享一个 x 轴或 y 轴,'col':设置每个子图列共享一个 x 轴或 y 轴。
squeeze:布尔值,默认为 True,表示额外的维度从返回的 Axes(轴)对象中挤出,对于 N*1 或 1*N 个子图,返回一个 1 维数组,对于 N*M,N>1 和 M>1 返回一个 2 维数组。如果设置为 False,则不进行挤压操作,返回一个元素为 Axes 实例的2维数组,即使它最终是1x1。
subplot_kw:可选,字典类型。把字典的关键字传递给 add_subplot() 来创建每个子图。
gridspec_kw:可选,字典类型。把字典的关键字传递给 GridSpec 构造函数创建子图放在网格里(grid)。
**fig_kw:把详细的关键字参数传给 figure() 函数。
'''
plt.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
# eg:
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
fig, axs = plt.subplots(2, 2, subplot_kw=dict(projection="polar"))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)
plt.show()
.subplot2grid()
# 设定网格形状shape,选中网格位置loc, 确定选中行列区域数量,编号从0开始
plt.subplot2grid(shape, loc, rowspan=1, colspan=1)
# eg:
ax1 = plt.subplot2grid((3,3), (0,0), colspan=3)
# 在ax1区域...画图
ax2 = plt.subplot2grid((3,3), (1,0), colspan=2)
# 在ax2区域...画图
ax3 = plt.subplot2grid((3,3), (1,2), rowspan=2)
# 在ax3区域...画图
ax4 = plt.subplot2grid((3,3), (2,0))
# 在ax4区域...画图
ax5 = plt.subplot2grid((3,3), (2,1))
# 在ax5区域...画图

可以用 GridSpec 类对以上操作进行化简:
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(3, 3)
ax1 = plt.subplot(gs[0, :])
ax2 = plt.subplot(gs[1, :-1])
ax3 = plt.subplot(gs[1:, -1])
ax4 = plt.subplot(gs[2, 0])
ax5 = plt.subplot(gs[2, 1])
图表函数
关键:选取恰当的图形展示数据含义
pyplot能绘制许多基础图表函数,如下表所示:
函数 | 说明 |
---|---|
plt.plot(x, y, fmt, ...) | 绘制一个坐标图 |
plt.boxplot(data, notch, position) | 绘制一个箱形图 |
plt.bar(left, heigh, width, bottom) | 绘制一个条形图 |
plt.barh(width, bottom, left, heigh) | 绘制一个横向条形图 |
plt.polar(theta, r) | 绘制一个极坐标图 |
plt.pie(data, explode) | 绘制一个饼图 |
plt.psd(x, NFFT=256, pad_to, Fs) | 绘制一个功率谱密度图 |
plt.specgram(x, NFFT=256, pad_to, F) | 绘制一个谱图 |
plt.cohere(x, y, NFFT=256, Fs) | 绘制一个X-Y的相关性函数图 |
plt.scatter(x, y) | 绘制一个散点图 |
plt.step(x, y, where) | 绘制一个步阶图 |
plt.hist(x, bins, normed) | 绘制一个直方图 |
plt.contour(X, Y, Z, N) | 绘制一个等值图 |
plt.vlines() | 绘制一个垂直图 |
plt.stem(x, y, linefmt, markerfmt) | 绘制一个柴火图 |
plt.plot_date() | 绘制一个数据日期图 |
以上基础图表函数的用法就不一一展开细说,重点并不是弄懂每个图表函数怎么用,而是该用什么图表来展示数据。
本文来自博客园,作者:hzyuan,转载请注明原文链接:https://www.cnblogs.com/hzyuan/p/17063453.html
分类:
python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)