matplotlib库是一个非常强劲的Python的2D绘图库。其中pyplot库是matplotlib的基于状态的接口。它提供了类似于MATLAB的绘图方式。pyplot主要用于交互式绘图和程序化绘图生成的简单情况。
import matplotlib.pyplot as plt #导入matplotlib库进行绘图
import numpy as np #导入numpy库用以生成数据
#导入seaborn库用于让matplotlib有更好的绘制体验,seaborn库会更改底层matplotlib库设置
import seaborn as sns
plot函数用以绘制折线图。适用场合是二维数据集(每个数据点包括两个值x和y),尤其是那些趋势比单个数据点更重要的场合。它还适合多个二维数据集的比较。
优势:容易反应出数据变化的趋势,可以有效处理大数据集,可以展示数据随时间变化趋势。
劣势:数据集太小时显示不直观。
其函数原型如下:
matplotlib.pyplot.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>]
1.fmt参数的格式为’[marker][linestyle][color]’’,其中三者的顺序可以调换,当fmt与关键字参数冲突的时候,关键字参数优先。
2.scalex,scaley参数是指假设数据画图大于当前窗口的时候是否自动扩大窗口以适应数据大小。
3.color属性的设置会覆盖markeredgecolor和markerfacecolor的初始设置。
4.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实例进行属性设置:
1.画图的时候直接指定参数:
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()
2.绘制完毕之后我们想更改单独线条的属性,对相应的Line2D实例使用set_property方法进行设置:
line[0].set_linewidth(15) #设置线宽15
line[0].set_color('#000000') #设置线条颜色RGB为0
line[0].set_markerfacecolor('#FFFFFF') #设置标记点颜色位白色
3.使用反馈设置方法最大的用处在于绘制多条线条时,可以分别设置属性,下例是调用两次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的线条样式为.
4.画多个下折线图的时候也可以传递(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('--') #设置第二条线条样式为--
5.不同参数设置的可视化程序如下:
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()
画图结果如下: