有些时候,画顺滑的图形不能满足表达需求,可能需要使用步进图形来辅助表达。
【1】官网教程
首先我们乖乖进入官网,使用下述链接直达:
Step Demo — Matplotlib 3.9.2 documentation
这里有两个图形作为示例,为高效学习,我们先掌握第一个,对代码进行详细解读。
【2】代码解读
首先引入计算和画图模块:numpy和matplotlib。
import matplotlib.pyplot as plt #引入matplotlib模块画图 import numpy as np #引入numpy模块做数学计算
然后展开变量定义:
x = np.arange(14) #定义自变量 y = np.sin(x / 2) #定义因变量
之后就定义了画步进图,一共三种风格:
plt.step(x, y + 2, label='pre (default)') #画第一个步进图,类型为pre plt.plot(x, y + 2, 'o--', color='grey', alpha=0.3) #输出步进图 plt.step(x, y + 1, where='mid', label='mid') #画第二个步进图,类型为mid plt.plot(x, y + 1, 'o--', color='grey', alpha=0.3) #输出步进图 plt.step(x, y, where='post', label='post') #画第三个步进图,类型为post plt.plot(x, y, 'o--', color='grey', alpha=0.3) #输出步进图
再之后给图形增加网格,设置图例名:
plt.grid(axis='x', color='0.95') #画网格 plt.legend(title='Parameter where:') #设置图例名 plt.title('plt.step(where=...)') #设置图名
最后一步,输出图形:
plt.show() #输出图形
整个代码的核心在于plt.step()函数,具体链接如下:
https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.step.html#matplotlib.pyplot.step
在 plt.step()函数中,有如下要素:
matplotlib.pyplot.step(x, y, *args, where='pre', data=None, **kwargs)
输出图形为:
图1
x:自变量
y:因变量
where:三种类型,pre((x[i-1], x[i])区间取值
y[i]
),mid((x[i-0.5], x[i+0.5])区间取值
y[i]
),post((x[i], x[i+1])区间取值
y[i]
)
data:标签名称
其他。
至此,增减注释后的完整代码为:
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算
x = np.arange(14) #定义自变量
y = np.sin(x / 2) #定义因变量
plt.step(x, y + 2, label='pre (default)') #画第一个步进图,类型为pre
plt.plot(x, y + 2, 'o--', color='grey', alpha=0.3) #输出步进图
plt.step(x, y + 1, where='mid', label='mid') #画第二个步进图,类型为mid
plt.plot(x, y + 1, 'o--', color='grey', alpha=0.3) #输出步进图
plt.step(x, y, where='post', label='post') #画第三个步进图,类型为post
plt.plot(x, y, 'o--', color='grey', alpha=0.3) #输出步进图
plt.grid(axis='x', color='0.95') #画网格
plt.legend(title='Parameter where:') #设置图例名
plt.title('plt.step(where=...)') #设置图名
plt.show() #输出图形
【3】代码改写
精简代码,全部写到一个plt.step()函数中:
plt.step(x, y + 2, x,y+1,x,y,label='mid') #画步进图,类型为pre plt.plot(x, y + 2, x,y+1,x,y,'o--', color='grey', alpha=0.3) #输出步进图
此时的输出结果为:
图2
可见,所有图形同时输出了,不过采用了mid也就是中间步进的方式,输出的实现图也仅仅是最后一个图形采用了虚线。
此时的完整代码为:
import matplotlib.pyplot as plt #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算
x = np.arange(14) #定义自变量
y = np.sin(x / 2) #定义因变量
plt.step(x, y + 2, x,y+1,x,y,label='mid') #画步进图,类型为pre
plt.plot(x, y + 2, x,y+1,x,y,'o--', color='grey', alpha=0.3) #输出步进图
plt.grid(axis='x', color='0.95') #画网格
plt.legend(title='Parameter where:') #设置图例名
plt.title('plt.step(where=...)') #设置图名
plt.show() #输出图形
【4】其他更改
在其余位置,尝试更改线型和输出透明度:
plt.plot(x, y + 2,'--',x,y+1,x,y,'o--', color='g', alpha=0.9) #输出步进图
y+2后增加“--”标识,用以绘制虚线。
同时颜色也修改为了green绿色,
此时的输出图形为:
图3
线型设置可参考下述链接:
matplotlib.pyplot.plot — Matplotlib 3.9.2 documentation
【5】总结
学习了step步进图的基本画法,掌握了线型设置和颜色修改的技巧。