失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > python之matplotlib实现绘图和可视化

python之matplotlib实现绘图和可视化

时间:2023-03-25 13:08:10

相关推荐

python之matplotlib实现绘图和可视化

绘图是数据分析工作中最重要的任务之一,是探索过程的一部分。python为我们提供了许多可视化工具,最常用的的是matplotlib。matplotlib是一种用于创建出版质量图标的桌面绘图包(主要是2D方面),它为python构建了一个MATLAB式的绘图接口。它不仅支持各种操作系统上许多不同的GUI后端,而且还能将图片导出为各种常见的矢量和光栅图:PDF、SVG、JPG、PNG、BMP、GIF等。matplotlib还有许多插件工具集,如用于3D图形的mplot3d以及用于地图和投影的basemap.

一、Figure

matplotlib的图像都位于Figure对象中,利用plt.figure创建新的Figure,不能通过空的Figure绘图。必须用add_subplot创建一个或多个subplot才行。

代码:

import matplotlib.pyplot as pltimport numpy as npdata = np.arange(10)plt.plot(data)#创建一个figurefig = plt.figure()#创建的图像是2*2的,目前选中的是4个subplot中的第一个(编号从1开始)ax1 = fig.add_subplot(2, 2, 1)ax3 = fig.add_subplot(2, 2, 3)ax2 = fig.add_subplot(2, 2, 2)#此时,发出一个绘图指令,matplotlib会在最后一个用过的subplot(若无,则创建一个)上进行绘制#'k--'是一个线性选项,代表黑色虚线plt.plot(np.random.randn(50).cumsum(), 'k--')#柱状图ax1.hist(np.random.randn(100), bins=20, color='k', alpha=0.3)#散点图ax3.scatter(np.arange(30), np.arange(30) + 3 * np.random.randn(30))#可以使用plt.close()方法关闭图在控制台出现#plt.close('all')

结果显示:

二、subplot

plt.subplots创建新的figure,并返回一个含有已创建的subplots对象的numpy数组,这样可以轻松地对axes数组进行索引,类似于二维数组的索引,例:axes[0,1]代表第一行第二个图:

其中subplots函数中各选项:

代码:

#创建subplot对象fig, axes = plt.subplots(2, 3)"""result:2*3的子图其中axes:array([[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000BBDBE80>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000000BC055C0>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000000C2A8400>],[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000C464C88>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000000C4D9358>,<matplotlib.axes._subplots.AxesSubplot object at 0x000000000D3976A0>]], dtype=object)"""fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)for i in range(2):for j in range(2):axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5)#将间距缩到0,从图中可以看出轴标签重叠,对于这种情况,只能自己设置刻度位置和标签了plt.subplots_adjust(wspace=0, hspace=0)

结果:

三、颜色、标签和线型

matplotlib的plot函数接受一组X和Y坐标,还可以接受一个表示颜色和线型的字符串缩写。

若要根据x和y绘制绿色虚线,可执行以下代码:

ax.plot(x,y,'g--')#或更明确的方式ax.plot(x,y,linestyle='--',color='g')

线型图还可以加上一些标记(marker),以强调实际的数据点。

代码:

plt.figure()plt.plot(np.random.randn(30).cumsum(), 'ko--')#上式可以改成更为明确的形式:plt.plot(np.random.randn(30).cumsum(), color='k', linestyle='dashed', marker='o')

结果:

在线型图中,非实际数据点默认是按线性方式插值,可以通过drawstyle选项修改:

plt.figure()data = np.random.randn(30).cumsum()plt.plot(data, 'k--', label='Default')plt.plot(data, 'k-', drawstyle='steps-post', label='steps-post')plt.legend(loc='best')

四、刻度、标签、图例

pyplot接口的设计目的就是交互式使用,含有xlim、xticks和xticklabels之类的方法。它们分别控制图表的范围、刻度位置、刻度标签。其使用方式有以下两种:

调用时不带参数,则返回当前的参数值。例如,plt.xlim()返回当前X轴绘图范围。调用时带参数,则设置参数值。因此,plt.xlim([0,10])会将X轴的范围设置为0到10。

这些方法都是对当前或最近创建的AxesSubplot起作用的。

对于subplot对象,以xlim为例,就是ax.get_xlim和ax.set_xlim。

#设置标题、轴标签、刻度、刻度标签fig = plt.figure()ax = fig.add_subplot(1, 1, 1)ax.plot(np.random.randn(1000).cumsum())#设置刻度ticks = ax.set_xticks([0, 250, 500, 750, 1000])#设置刻度标签labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'],rotation=30, fontsize='small')#设置标题ax.set_title('My first matplotlib plot')#设置轴标题ax.set_xlabel('Stages')

结果:

添加图例

图例(legend)是另一种用于标识图表元素的重要工具。

方法有两种,最简单的一种是在添加subplot时传入label参数。

from numpy.random import randnfig = plt.figure(); ax = fig.add_subplot(1, 1, 1)ax.plot(randn(1000).cumsum(), 'k', label='one')ax.plot(randn(1000).cumsum(), 'k--', label='two')ax.plot(randn(1000).cumsum(), 'k.', label='three')#显示图例,loc表示图例位置,best为最佳位置。#ax.legend()或plt.legend()方法ax.legend(loc='best')

左图是无图例的,右图是有图例的。

注解以及在subplot上绘图

除标准的图表对象之外,你可能还希望绘制一些自定义的注释(比如文本、箭头或其他图形等)。

注解还可以通过text、arrow和annotate等函数进行添加,text可以将文本绘制在图表的指定坐标(x,y),还可以加上一些自定义格式:

from datetime import datetimeimport pandas as pdfig = plt.figure()ax = fig.add_subplot(1, 1, 1)data = pd.read_csv('spx.csv', index_col=0, parse_dates=True)spx = data['SPX']spx.plot(ax=ax, style='k-')crisis_data = [(datetime(, 10, 11), 'Peak of bull market'),(datetime(, 3, 12), 'Bear Stearns Fails'),(datetime(, 9, 15), 'Lehman Bankruptcy')]#添加注释(包括文本和箭头)for date, label in crisis_data:ax.annotate(label, xy=(date, spx.asof(date) + 75),xytext=(date, spx.asof(date) + 225),arrowprops=dict(facecolor='black', headwidth=4, width=2,headlength=4),horizontalalignment='left', verticalalignment='top')# 设置x、y轴范围:Zoom in on -ax.set_xlim(['1/1/', '1/1/'])ax.set_ylim([600, 1800])#添加标题ax.set_title('Important dates in the - financial crisis')

结果:

五、将图表保存到文件

利用plt.savefig可以将当前图表保存到文件。该方法相当于Figure对象的实例方法savefig。

如果觉得《python之matplotlib实现绘图和可视化》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。