python matplotlib绘图总结

python matplotlib绘图总结,第1张

目录

1、画线

a、常规画线: matplotlib.pyplot.plot()

1)线的颜色、风格、标记点形状

2)一图多线,并加图例

b、非均匀画线 semilogy()

c、给特定的点打标签

2、散点图

3、画矩阵

4、自定义坐标轴显示内容 xticks()/yticks()


官网教程:Plot types — Matplotlib 3.5.2 documentation

1、画线 a、常规画线: matplotlib.pyplot.plot()

该部分内容包含:(常规画线、颜色、线条风格、坐标轴标签、一图多线、图例)的设置方法。

定义:

plot(*args, scalex=True, scaley=True, data=None, **kwargs)

用法:

对于一般的函数 y=f(x),可以直接绘制:plt.plot(x, y),当省略x坐标时 plt.plot(y),默认x坐标从零开始依次递增1个单位长度。

# 在[0, 30]范围内均匀取30个点
x_data = np.linspace(0, 10, 30)
y_data = np.sin(x_data)
# 画图,第一个参数是x值,第二个是y值
plt.plot(x_data, y_data)
# 坐标轴标签
plt.ylabel("sin(x)")  # y轴
plt.xlabel("x")  # x轴
# 图的标题
plt.title("y=sin(x)")
# 画图
plt.show()

使用 plt.title("y=sin(x)") 可以设置图的标题,使用 plt.ylabel() 函数设置坐标轴标签,最终图像的显示使用 plt.show() 函数

1)线的颜色、风格、标记点形状

线的颜色使用 color 属性设置,线的风格用 linestyle 属性设置,每个采样点处的标记形状用 marker 属性设置如 设置洋红色虚线并用下三角标记每个采样点:

plt.plot(y_data, color='m', marker='v', linestyle='--')

matplotlib 的所有颜色设置方法都类似,可选的颜色如下,属性设置中可以使用首字母或者全拼。

character

color

'b'

blue    蓝色

'g'

green  绿色

'r'

red      红色

'c'

cyan    蓝绿色(青色)

'm'

magenta 品红(洋红)—我也不知道这是啥shair,品红(R:128 G:0 B:128)

'y'

yellow 黄色

'k'

black   黑色

'w'

white   白色

可选的线条风格如下:

character

description

'-'

实线

'--'

虚线

'-.'

点实线

':'

点线

可选的所有标记形状如下:(不太好翻译的就用原英文描述代替了)

character

description

'.'

','

像素

'o'

圆圈

'v'

下三角  triangle_down marker

'^'

上三角

'<'

左三角

'>'

右三角

'1'

tri_down marker  

'2'

tri_up marker

'3'

tri_left marker

'4'

tri_right marker

'8'

八边形  octagon marker

's'

四边形  square marker

'p'

五边形 pentagon marker

'P'

注意是大写P。plus (filled) marker

'*'

星标  star marker

'h'

六边形1  hexagon1 marker

'H'

hexagon2 marker

'+'

加号  plus marker

'x'

x号 x marker

'X'

x (filled) marker

'D'

菱形  diamond marker

'd'

thin_diamond marker

'|'

vline marker

'_'

hline marker

上例中的三种属性还可以使用组合形式符号:

plt.plot(y_data, 'm--v')
2)一图多线,并加图例

一图多线直接使用多个 plot 函数即可,图例在 plot 函数中通过 label 属性设置,并使用 legend() 函数设置显示位置,如下:

# 在[0, 30]范围内均匀取30个点
x = np.linspace(0, 10, 30)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(y1, 'm-v', label='sin')  # y1曲线标签为sin
plt.plot(y2, 'g-o', label='cos')  # y2曲线标签为cos
plt.ylabel("sin(x)/cos(x)")
plt.xlabel("x")
# 给图片在右上角添加图例
plt.legend(loc=0)
plt.title("multi-lines")
plt.show()

效果,注意各种标签出现的位置:

b、非均匀画线 semilogy()

有时可能会遇到数据跨度比较长但大部分数据可能集中在一段区域的情况,这时可以使用 semilogy() 函数来绘制曲线,最终的效果是将函数值取对数后绘制曲线。semilogx() 的用法类似。

比如通信领域常用的不同SNR下的BER曲线就是这样的情况,例子如下:

可以使用 plt.grid(True) 函数设置显示网格线。

SNR = [0, 5 ,10, 15, 20, 25, 30]
result = [0.15, 0.08, 0.03, 0.015, 0.005, 0.001, 0.0008]
plt.semilogy(result, 'm--v', label='SNR-BER')  # 对 result 取 log 后画线
plt.xlabel("SNR")
plt.ylabel("BER")
plt.title("log-line")
plt.legend(loc=0)
plt.grid(True)  # 显示网格线
plt.show()

结果如下,注意 y 轴的坐标取值情况:

c、给特定的点打标签

对于特殊的点,想标记出其对应的值,可以使用 plt.text(a, b, val, color='r') 函数。

如给上例第四个点标注下具体地值,可以添加以下语句:

plt.text(SNR[3], result[3], result[3], color = 'r')  # 标注第 4 个点的值

效果:

2、散点图

散点图主要使用 matplotlib.pyplot.scatter() 函数:

定义:matplotlib.pyplot.scatter — Matplotlib 3.5.2 documentation

scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)

除了 x,y其他都是可选参数,同样有 marker、color 参数,这俩参数用法与 plot 一样。

SNR = [0, 5 ,10, 15, 20, 25, 30]
result = [0.15, 0.08, 0.03, 0.015, 0.005, 0.001, 0.0008]
# 散点图
plt.scatter(SNR, result, marker='v', color='b', label='SNR-BER')
plt.xlabel("SNR")
plt.ylabel("BER")
plt.title("log-line")
plt.legend(loc=0)
plt.grid(True)  # 显示网格线
plt.show()

3、画矩阵

可以使用 matplotlib.pyplot.matshow() 函数绘制二维矩阵的图像。

这一般在矩阵可视化的时候用的比较多。另外可以使用 colorbar() 函数设置显示颜色标记。

比如绘制一个对角矩阵的图像:

# 创建对角矩阵
a = np.diag(range(15))
fig = plt.matshow(a)
# 显示颜色标记
plt.colorbar(fig.colorbar, fraction=0.2)
plt.show()

效果如下:

4、自定义坐标轴显示内容 xticks()/yticks()

如果坐标轴想用其他字符显示,可以使用 xticks() / yticks() 函数。函数第一个参数是原来的坐标显示列表,第二个参数是实际的显示字符。

# 创建对角矩阵
a = np.diag(range(5))
fig = plt.matshow(a)
# 显示颜色标记
plt.colorbar(fig.colorbar, fraction=0.2)
# 自定义 y 轴显示内容
plt.yticks(range(5),
           ['A', 'B', 'C', 'D', 'E'])
plt.show()

效果如下:

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/917189.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存