【matplotlib】可视化解决方案——如何正确使用plot方法
简单介绍matplotlib.pyplolt.plot函数的使用技巧和方法
概述
matplotlib 库是一个非常强劲的 Python 的2D 绘图库。其中 pyplot 库是 matplotlib 的基于状态的接口。它提供了类似于 MATLAB 的绘图方式。pyplot 主要用于交互式绘图和程序化绘图生成的简单情况。我们可以使用如下代码导入 matplotlib 库和其他必要库。
import matplotlib.pyplot as plt #导入matplotlib库进行绘图
import numpy as np #导入numpy库用以生成数据
#导入seaborn库用于让matplotlib有更好的绘制体验,seaborn库会更改底层matplotlib库设置
import seaborn as sns
plot()
函数用以绘制折线图。适用场合是二维数据集(每个数据点包括两个值 x 和 y),尤其是那些趋势比单个数据点更重要的场合。它还适合多个二维数据集的比较。
函数的定义如下:
def plot(args,scalex = True,scaley = True,data = None,** kwargs):
...
参数介绍:
- 参数1:x:指定 x 轴数据,默认 range(len(y))
- 参数2:y:指定 y 轴数据
- 参数3:fmt : str 型(可选),指定格式字符串
- 参数4:scalex : bool 型, (可选),默认 True,指定 X 视图是否适用于数据限制
- 参数5: scalex: bool 型, (可选),默认 True,指定 Y 视图是否适用于数据限制。
- 参数6:data : 指定需要标记的数据(可选)
- 参数7:kwargs:指定要是用的 Line2D 类属性
- 返回值1:包含绘制数据的线列表,即存放 Line2D 实例的列表,有几条线就返回包含几个 Line2D 实例的列表。
返回值示例:
[<matplotlib.lines.Line2D object at 0x000001F7EDE0A190>]
[<matplotlib.lines.Line2D object at 0x000001F7EDE0A4F0>]
[marker][linestyle][color]
,其中三者的顺序可以调换,当 fmt 与关键字参数冲突的时候,关键字参数优先。
- marker:指定标记点样式;
- linestyle:指定折线线性;
- color:指定线条颜色;
scalex,scaley参数是指假设数据画图大于当前窗口的时候是否自动扩大窗口以适应数据大小。
color属性的设置会覆盖 markeredgecolor 和 markerfacecolor 的初始设置。
Line2D参数的详细说明见 Line2D 专题。
以下是官网文档中中该函数的使用例子:
x = np.arange(10)
y = 2 * x + np.random.randint(0, 20)
exp1:plot(x, y) # plot x and y using default line style and color
exp2:plot(x, y, 'bo') # plot x and y using blue circle markers
exp3:plot(y) # plot y using x as index array 0..N-1
exp4:plot(y, 'r+-.') # ditto, but with red plusses
画图结果如下:
官方示例说明:
- exp1: 传递了 X、Y 两个参数,即传递了 X 和 Y 两个维度的数据,剩下的都是用默认值。
- exp2: 传递了 X、Y 以及 fmt 三个参数,fmt 参数中 b 代表 blue 表示线条为蓝色 o 代表标记点样式是圆形。
- exp3: 传递了 Y 一个参数,由图可知图一与图三相同,证明了值传递一个 Y 参数的情况下,X 默认为 len(Y)。
- exp4: 传递了 Y 和 fmt 两个参数,fmt 参数中 r 代表 red 表示线条为红色,+表示标记点都是+这个符号,-. 表示线条样式为“点横”线。
参数设置
plot 函数绘制折线图的时候可以有两种设置方式:第一种是在绘图调用 plot 函数的时候直接指定参数从而设置属性。第二种方法是绘图完毕后对返回的 Line2D 实例进行属性设置。
直接指定参数
line = plt.plot(
np.sin(np.arange(0, 10)),
antialiased=True, #指定进行抗锯齿
scalex=True, #X轴受数据制约
scaley=True, #Y轴受数据制约
linewidth=1.0, #指定线宽1.0
linestyle=None, #指定线条样式为默认
color='#FF0000', #指定线条颜色为RGB(255,0, 0)
marker='o', #指定标记点样式o
markersize=7.0, #指定标记点大小7.0
markeredgewidth=0.0, #指定标记点边缘宽度0.0
markeredgecolor='#F0E68C', #指定边缘颜色
markerfacecolor='#000000', #指定标记点颜色
markerfacecoloralt='#FF0000', #指定标记点备用颜色
fillstyle='full', #指定填充模式为完全填充
drawstyle='default', #指定绘图模式为默认线形图
solid_capstyle='butt', #指定实线笔帽样式
label='第' + '1' + '条线',
)
plt.title('plot示例', fontsize=20)
plt.legend()
plt.grid(False)
plt.xlabel('X', fontsize=20)
plt.ylabel('Y', fontsize=20)
plt.show()
画图结果如下:
使用 set_property 方法
绘制完毕之后我们想更改单独线条的属性,对相应的 Line2D 实例使用 set_property 方法进行设置:
line[0].set_linewidth(15) #设置线宽15
line[0].set_color('#000000') #设置线条颜色RGB为0
line[0].set_markerfacecolor('#FFFFFF') #设置标记点颜色位白色
画图结果如下:
使用反馈设置方法最大的用处在于绘制多条线条时,可以分别设置属性,下例是调用两次 plot 函数并分别设置属性:
line_sin = plt.plot(np.sin(np.arange(0, 10, 0.01)))
line_cos = plt.plot(np.cos(np.arange(0, 10, 0.01)))
line_cos[0].set_linewidth(15) #设置cos的线宽15
line_sin[0].set_linestyle('dashed') #设置sin的线条样式为.
画图结果如下:
画多个下折线图的时候也可以传递 X1,Y1,fmt1,X2,Y2,fmt2
这样的组合参数用一个 plot 函数就绘制多条折线图。
#花两条线sin和cos
line = plt.plot(np.arange(0, 10, 0.01), np.sin(np.arange(0, 10, 0.01)), 'r',
np.arange(0, 10, 0.01), np.cos(np.arange(0, 10, 0.01)), 'b')
line[0].set_linewidth(5) #设置第一条线宽5
line[0].set_linestyle('dashed') #设置第一条线条样式为dashed
line[1].set_color('#000000') #设置第二条线颜色为黑色
line[1].set_linestyle('--') #设置第二条线条样式为--
画图结果如下:
应用
不同参数设置的可视化程序如下:
figure = plt.figure(1, figsize=(15, 15))
ax1 = figure.add_subplot(331)
ax2 = figure.add_subplot(332)
ax3 = figure.add_subplot(333)
ax4 = figure.add_subplot(334)
ax5 = figure.add_subplot(335)
ax6 = figure.add_subplot(336)
ax7 = figure.add_subplot(337)
ax8 = figure.add_subplot(338)
ax9 = figure.add_subplot(339)
#正常
ax1.plot(np.sin(np.arange(0, 10, 0.1)), label='正常')
ax1.set_title('正常')
ax1.legend()
#更改标记点样式
ax2.plot(np.sin(np.arange(0, 10, 0.1)), marker='*', label='更改标记点样式')
ax2.set_title('marker=\'*\'')
ax2.legend()
#更改线条样式
ax3.plot(np.sin(np.arange(0, 10, 0.1)), linestyle='--', label='更改线条样式')
ax3.set_title('linestyle=\'--\'')
ax3.legend()
#更改标记点颜色
ax4.plot(np.sin(np.arange(0, 10, 0.1)), marker='*', markerfacecolor='#F0E68C', label='更改标记点颜色')
ax4.set_title('markerfacecolor=\'#F0E68C\'')
ax4.legend()
#更改标记点边缘颜色
ax5.plot(np.sin(np.arange(0, 10, 0.1)), marker='*', markeredgecolor='#F0E68C', label='更改标记点边缘颜色')
ax5.set_title('markeredgecolor=\'#F0E68C\'')
ax5.legend()
#更改线条宽度
ax6.plot(np.sin(np.arange(0, 10, 0.1)), linewidth=8, label='更改线条宽度')
ax6.set_title('linewidth=8')
ax6.legend()
#更改画图模式
ax7.plot(np.sin(np.arange(0, 10, 0.1)), drawstyle='steps', label='更改画图模式')
ax7.set_title('drawstyle=\'steps\'')
ax7.legend()
#更改填充模式
ax8.plot(np.sin(np.arange(0, 10, 0.1)), marker='o', markerfacecolor='#F0E68C', markerfacecoloralt='#FF0000', fillstyle='left', label='更改填充模式')
ax8.set_title('fillstyle=\'left\'')
ax8.legend()
#更改标记点大小
ax9.plot(np.sin(np.arange(0, 10, 0.1)), marker='o', markersize=5, label='更改标记点大小')
ax9.set_title('markersize=15')
ax9.legend()
画图结果如下:
- 【matplotlib】可视化解决方案——如何向画布中添加坐标轴
- 【matplotlib】可视化解决方案——如何正确使用matplotlib颜色系统
- 【matplotlib】可视化解决方案——如何实现画布局部放大功能
- 【matplotlib】可视化解决方案——如何更改matplotlib配置信息
- 【matplotlib】可视化解决方案——如何定制化网格
- 【matplotlib】可视化解决方案——如何向画布添加交叉直线
- 【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题
- 【matplotlib】可视化解决方案——如何设置matplotlib风格集
- 【matplotlib】可视化解决方案——如何设置轴标签的透明度和大小
- 【matplotlib】可视化解决方案——如何向图表中添加数据表
往期回顾
文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!如果觉得我的文章写得还行,不妨支持一下。你的每一个转发、关注、点赞、评论都是对我最大的支持!
更多推荐
所有评论(0)