文章目录
- 绘制曲线图
- 完整流程
- 图像属性
绘制曲线图
matplotlib是python中最常用的可视化库,提供了不同坐标系下的二十余种常用图像,并且提供了动态图像绘制的方法,可以满足科学计算中的绝大多数可视化需求。而在matplotlib中,绝大多数的常用函数都在pyplot模块中,为了便于行文,在后文中,用【plt】代替。
而在所有的绘图类型中,又以曲线图最为常用,在【plt】中,用plot来绘制曲线图。正常来说,在平面直角坐标系中绘制折线,至少需要 x , y x,y x,y两个坐标,即输入两组数据。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(100)
y = x**2
plt.plot(x,y)
plt.show()
如果plot函数只接受一组数据,则会默认自然数列为 x x x坐标,故而上述绘图代码可以更简单地写为下面的形式。
plt.plot(y)
plt.show()
完整流程
尽管两行代码便可完成曲线绘制,但这显然略去了诸多环节,一个完整的绘图流程则至少包含四行代码
fig = plt.figure("plot")
ax = fig.add_subplot()
ax.plot(x,y)
plt.show()
其中,fig
是绘图窗口;ax
是绘图坐标系;接下来在ax中绘制
x
,
y
x,y
x,y的曲线,最后调用plt.show
,将我们绘制好的窗口弹出,这才是【plt】绘图的全部流程。
图像属性
尽管绘图逻辑十分简单,但【plt】提供了常用的绘图要素,比如线的宽窄、颜色、形态以及标记,通过下列参数来调控
参数 | 简写 | 功能 |
---|---|---|
linestyle | ls | 线型 |
linewidth | lw | 线宽 |
marker | 标记形状 | |
markersize | ms | 标记尺寸 |
markeredgewidth | mew | 标记边缘线宽 |
markeredgecolor | mec | 标记颜色 |
markerfacecolor | mfc | 标记内部颜色 |
其中可选的线型和点型如下表所示
字符 | 类型 | 字符 | 类型 | 字符 | 类型 | 字符 | 类型 |
---|---|---|---|---|---|---|---|
‘-’ | 实线 | ‘–’ | 虚线 | ‘-.’ | 虚点线 | ‘:’ | 点线 |
‘.’ | 点 | ‘,’ | 虚线 | ||||
‘o’ | 圆点 | ‘*’ | 星型点 | ‘+’ | 加号点 | ‘x’ | 乘号点 |
‘v’ | 下三角点 | ‘^’ | 上三角点 | ‘<’ | 左三角点 | ‘>’ | 右三角点 |
‘1’ | 下三叉点 | ‘2’ | 上三叉点 | ‘3’ | 左三叉点 | ‘4’ | 右三叉点 |
‘s’ | 正方点 | ‘p’ | 五角点 | ‘h’ | 六边形1 | ‘H’ | 六边形2 |
‘D’ | 实心菱形点 | ‘d’ | 瘦菱形点 | ‘_’ | 横线点 |
常见颜色可通过下表中的字符来设置
字符 | 颜色 | 字符 | 颜色 | 字符 | 颜色 |
---|---|---|---|---|---|
‘b’ | blue | ‘g’ | green | ‘r’ | red |
‘c’ | cyan | ‘m’ | magenta | ‘y’ | yellow |
‘k’ | black | ‘w’ | white |
下面挑选几个做个演示
x = np.linspace(0, 3.14, 20)
Ls = ['-', '--', '-.', ':']
mks = ['s', 'p', 'h', 'H']
cs = ['r', 'g', 'b','c']
ys = [np.sin(x), np.cos(x), np.tan(x), np.sqrt(x)]
labels = ['sin', 'cos', 'tan', 'sqrt']
for i in range(4):
plt.plot(x, ys[i], ls=Ls[i],
marker=mks[i], ms=5,
color=cs[i], label=labels[i])
plt.grid()
plt.legend()
plt.show()
上面的绘图代码中,除了规范了点、线特性,还通过plt.grid
绘制了网格,以及用plt.legend
绘制了图例。效果如下
考虑到线的类型、点的类型以及颜色类型都可以用字符来表示,所以【plt】支持奖这些类型合在一起,从而在绘图时可以更加便捷,所以将代码写成下面的形式,也可以得到和上图相同的结果
strs = ['rs-', 'gp--', 'bh-.', 'cH:']
for i in range(4):
plt.plot(x, ys[i], strs[i], ms=5, label=labels[i])
plt.grid()
plt.legend()
plt.show()