简介:做信息可视化是数据分析中最重要的任务之一。可视化可能是勘探过程的一部分,例如,帮助识别异常值或所需的数据转换,或者为建模提供一些思路。对于其他人来说,构建交互式网络可视化可能是最终目标。Python有很多附加的库可以用来制作静态或动态可视化文件,但我将主要关注matplotlib和基于它的库。

本文摘自《Python数据分析》第二版。如需转载,请联系我们

Matplotlib是一个桌面绘图包,用于生成发布质量图表。本项目由约翰·亨特于2002年发起,旨在Python环境下以MATLAB风格绘图。Matplotlib和IPython社区合作,简化IPython shell的交互绘图。Matplotlib支持所有操作系统上的各种GUI后端,也可以将可视化导出为所有常用的矢量和光栅图形格式。).

随着时间的推移,Mapplotlib产生了一些额外的数据可视化工具包,并使用Mapplotlib绘制底层。

学习以下示例代码最简单的方法是在Jupyter笔记本中使用交互式绘图。设置时,需要在Jupyter笔记本中执行以下语句:

%matplotlib笔记本

00 matplotlib API简明介绍

使用matplotlib时,我们使用以下导入约定:

in在In Out:数组中:数据: data =np.arange中:作为np导入:importmatplotlib . py plot as PLT

在Jupyter中运行% mapplotlib笔记本,我们可以尝试生成一个简单的图形。如果所有设置都正确,将出现如图1所示的图形:

在中:plt.plot

▲图1简单线性图

虽然seaborn等库和熊猫内置的绘图功能可以处理大部分普通的绘图细节,但是如果想自定义除了提供的功能选项之外,还需要学习一些matplotlib的AIP。

本文没有足够的篇幅全面介绍matplotlib的函数宽度和深度。但是介绍应该足够让你入门了。Matplotlib的可视化作品库和文档是学习高级功能的最佳资源。

01图片和子图

matplotlib绘制的地图位于Figure对象中。您可以使用plt.figure生成新图片:

in:fig = PLT . fig

在IPython中,会出现一个空白色的绘图窗口,但是在Jupyter中什么都不会显示,直到我们使用一些其他的命令。Plt.figure有一些选项,例如,figure size是为了确保图片存储在硬盘上时有一定的大小和纵横比。

不能用空白图画画。您需要使用add_subplot创建一个或多个子图:

in:fig = PLT . fig

In : ax1 =fig.add_subplot

上面代码的意思是图片应该是2*2,我们已经选择了四位数中的第一位。如果您随后创建两个子图,您将得到一个如图2所示的可视化效果:

In : ax2 =fig.add_subplot

In : ax3 =fig.add_subplot

▲图2 a 空带三个子图的白色matplotlib图

使用Jupyter笔记本有一个细节需要注意。每个单元格运行后,图表会重置。因此,对于更复杂的图表,您必须将所有绘图命令放在一个笔记本单元格中。

我们在同一个单元格中运行以下代码:

图=plt.figure

ax1 =fig.add_subplot

ax2 =fig.add_subplot

ax3 =fig.add_subplot

当您输入绘图命令plt.plot时,matplotlib将在最后一个图片和子图片上绘图,从而隐藏图片和子图片的创建。因此,如果我们添加以下代码,您将获得如图3所示的可视化效果:

in:PLT . plot。cumsum,' k -')

▲图3单个子图绘制的数据可视化

“K-”是绘制黑色分段线的样式选项。图add _ plot返回的对象是AxesSubplot对象。有了这些对象,就可以在其他空白色子图上直接调用对象的实例方法进行绘制:

in:_ = ax1 . hist,bins = 20,color='k ',alpha=0.3)

In : ax2 .散点,NP . arange+3 * NP . random . randn)

▲图4添加子图后的数据可视化

可以在matplotlib的官方文档中找到完整的图形类型。

使用子图网络创建图片是一个非常常见的任务,所以matplotlib包含了一个方便的方法PLT . subtracts,它创建一个新的图片,然后返回包含生成的子图对象的NumPy数组:

在:图中,轴=plt .支线剧情

在轴上

Out:

数组

参数

形容

nrows

子图中的行数

ncols

子图的列号

sharex

所有子图使用相同的X轴比例

sharey

所有子图都使用相同的y轴比例

支线剧情_kw

传入add_subplot的关键字参数字典,用于生成子图

* *图_kw

生成图片时使用的附加关键字参数,如PLT。子组件)

▲表1 pyplot .支线剧情选项

调整子图周围的间距

默认情况下,matplotlib在子图的外部与子图之间留有一定的距离。该间距是相对于图形的高度和宽度指定的,因此如果您通过编程或手动使用图形用户界面窗口来调整图形的大小,图形将自动调整。您可以在图形对象上使用子情节_调整方法来更改间距,也可以将其用作顶级函数:

子情节_调整

Wspace和hspace分别控制图片的宽度和高度百分比,可以作为子图片之间的距离。这里有一个小例子,我将把这个差距缩小到零:

图,轴= plt .子图

对于范围中的I:

对于范围中的j:

轴。hist,bins = 50,color = 'k ',alpha = 0.5)

PLT . subtracts _ adjust

▲图5无内部子图区间的数据可视化

您可能会注意到轴标签重叠。Matplotlib不检查标签是否重叠,因此您需要在类似情况下通过明确指定比例位置和比例标签来固定轴标签。

02颜色、标记和线型

matplotlib的主函数图接收一个带有x和y周的数组和一些可选的字符串缩写参数,以指示颜色和线型。例如,要用绿色虚线画一条从x到y的线,您需要执行以下操作:

ax.plot

这种在字符串中指定颜色和线条样式的方式很方便。实际上,如果以编程方式创建绘图,可能不希望混合字符串来创建具有所需样式的图表。同样的图表可以用更明确的方式表达:

ax.plot

ax.plot

常见颜色有许多颜色缩写,但您可以通过指定十六进制颜色代码来指定任何颜色。参考plot函数的文档字符串可以看到所有的行类型。

折线图也可以标记为突出显示实际数据点。因为matplotlib创建了一个连续的折线图,所以有时不清楚插入点在哪里。标记可以是样式字符串的一部分,样式字符串中的线型和标记类型必须遵循颜色:

in:from numpy . random import randn

In : plt.plot。cumsum,' ko -')

▲图6带标记的折线图

上面的代码可以写得更明白:

图)。cumsum,color='k ',linestyle= '虚线',marker='o ')

对于折线图,您会注意到默认情况下后续点是线性插值的。您可以通过drawstyle选项更改它:

In : data =np.random.randn。cumsum

在中:plt.plot

out:

In : plt.plot

out:

In : plt.legend

▲图7不同绘图风格选项下的折线图

您可能会注意到,运行代码后会有这样的输出。matplotlib返回的对象是指刚刚添加的图表子组件。很多时候,您可以放心地忽略这些输出。在这里,因为我们将标签传递给了绘图,所以我们可以使用plt.lengend为每一行生成一个图例来区分。

无论是否在用数据绘图时传递lebel选项,都必须调用plt.lengend生成图例来生成图例。

03比例尺、标签和图例

大多数图形修改工作有两种主要方式:使用编程pyplot接口和更面向对象的本机matplotlib API。

Pyplot界面设计为交互式使用,包括xllim、xtick和xtcklabels等方法。这些方法分别控制绘图范围、比例位置和比例标签。我们可以通过两种方式使用它:

在没有函数参数的情况下调用,返回当前的参数值返回当前的x轴绘图范围 )。传入参数的情况下调用,并设置参数值会将x轴的范围设置为0到10)。

所有这些方法都将在当前活动或最近创建的AxeSubplot上生效。这些方法中的每一种都对应于子图本身的两种方法;Xlim对应ax.get_lim和ax.set_lim。我更喜欢使用plot的实例方法,因为它更显而易见,但是当然你可以使用更方便的方法。

1.设置标题、轴标签、刻度和刻度标签

为了解释轴定制,我将生成一个简单的图表,并绘制一个随机漫步:

in:fig = PLT . fig

In : ax = fig.add_subplot

in:ax . plot。cumsum)

▲图8显示了一个简单的X轴图表

改变x轴比例最简单的方法是使用set _ XT signs和set _ xticklebels。Set _ xticks表示在数据范围内设置刻度的位置;默认情况下,这些秤也有标签。但是我们可以使用set_xticklabels为标签赋值:

In :刻度= ax . set _ XT picks

in:labels = ax . set _ xticklabels

旋转选项将x轴刻度标签旋转30度。最后,set_xlabel将给x轴命名,set_titel给子图命名:

在: ax.set_title

out:& lt;matplotlib.text.Text在0x7fb624d055f8 >处;

In : ax.set_xlabel

▲图9 X轴刻度的简单示例

修改y轴坐标也是同样的过程,所以可以用y替换上例中的x,轴的类型有一个设置方法,允许批量设置绘图属性。根据前面的例子,我们可以编写以下代码:

道具={

标题:“‘我的第一个matplotlib情节’,

xlabel:“‘阶段’

}

ax . set

2.添加图例

图例是用来区分绘图元素的重要内容。添加一个传说的方法有很多。最简单的方法是在添加每个图表时传递标签参数:

in:from numpy . random import randn

in:fig = PLT . fig;ax =fig.add_subplot

在中:ax.plot。cumsum,' k ',label='one ')

out:

在中:ax.plot。cumsum,' k -',label='two ')

out:

在中:ax.plot。cumsum,' k . ',label = ' three ')

out:

运行上述代码后,还可以调用ax.legend或plt.legend来自动生成一个图例。结果图表见图10:

In : ax.legend

▲图10是一个简单的图表,有三条虚线和图例

图例方法还有其他几个位置参数loc。参考文档字符串了解更多信息。

loc参数告诉matplotlib放置图表的位置。如果不挑剔的话,‘最好’是个不错的选择,它会自动选择最合适的位置。如果取消图例中的元素,请不要传入label参数或传入label='_nolegend_ '。

04注释和子图处理

除了标准绘图类型之外,您可能希望在图表上绘制自己的注释,注释可能包含文本、箭头和其他图形。您可以使用文本、箭头和注释方法来添加注释和文本。文本在图表上给定坐标,根据可选的自定义样式绘制文本:

ax.text

注释可以同时绘制文本和箭头。举个例子,我们来绘制一下2007年以来标准普尔500指数的收盘价,并在图表中标出2008年到2009年金融危机中的重要日期。你可以在Jupyter笔记本的一个单元格中复制这些代码。参考图11中的代码运行结果:

fromdatetime importdatetime

图=plt.figure

ax =fig.add_subplot

data = PD . read _ CSV

spx =数据

spx.plot

危机_数据=

fordate,label incrisis_data:

ax . annotation +75),

xytext= +225),

arrowprops = dict,

水平对齐= '左',垂直对齐= '上')

#放大2007-2010年

ax.set_xlim

ax.set_ylim

▲图11 2008-2009年金融危机的重要日期

图表中有一些重要的点需要突出显示:ax.annotate方法可以在指定的X和Y坐标上绘制标签。我们可以使用set_xlim和set_ylim方法来手动设置图表的边界,而不是使用matplotlib的默认设置。最后,ax.set_title给图表添加一个主标题。

参考网上matplotlib展厅了解更多标注实例。

画图形要注意的点比较多。Matplotlib包含表示各种常见图形的对象,这些对象的引用是面片。有些图形,比如矩形和圆形,可以在matplotlib.pyplot中找到,但是完整的图形集是在matplotlib.patches中找到的

当您想要向图中添加一个图时,您需要生成一个补丁对象shp,并调用ax.add_patch将其添加到子图中:

图=plt.figure

ax =fig.add_subplot

rect =plt。矩形,0.4,0.15,颜色='k ',α= 0.3)

circ =plt。圆,0.15,颜色='b ',α= 0.3)

pgon =plt。多边形

ax.add_patch

ax.add_patch

ax.add_patch

▲图12三种不同补丁图形的可视化

当您看到许多常见绘图类型的实现时,您会发现它们都是由补丁组装而成的。

05将图片保存到文件中

您可以使用plt.savefig将活动图片保存到文件中。这个方法相当于图片对象的savefig实例方法。例如,要将图片保存为SVG,您只需输入以下代码:

plt.savefig

文件类型是从文件扩展名推断出来的。所以如果你用。pdf,你会得到一个PDF。我经常用几个重要选项发布图形:dpi,控制每英寸点数的分辨率;Bbox_inches,可以修剪实际图形的空白色。为了得到同样的PNG图片,使用最小的空400 DPI的白色,需要运行以下代码:

plt.savefig

Savefig不能写入硬盘,它可以将图片写入所有文件对象,如BytesIO:

fromio importBytesIO

buffer=BytesIO

plt.savefig

plot_data =buffer.getvalue

表2是保存图的其他选项列表:

参数

形容

fname

包含文件路径或Python文件类型对象的字符串。图像格式是从文件扩展名

dpi

每英寸点数的分辨率;默认值为100,但可以进行配置

facecolor,edgecolor

子图外部图形背景的颜色;默认为‘w’

格式

文件格式

bbox _英寸

要保存的图片范围;如果您通过“通过”,图片空周围的白色部分将被删除

▲表2图.保存图选项

06 matplotlib设置

Matplotlib配置了配色方案和默认设置,主要用于准备图片发布。幸运的是,几乎所有的默认行为都可以通过广泛的全局参数进行定制,包括图形大小、子图间距、颜色、字体大小、网格样式等等。使用rc方法是通过Python编程修改配置的一种方式。例如,要将全局默认数字大小设置为10×10,您可以输入:

plt.rc)

rc的第一个参数是你要定制的组件,比如' figure ',' axes ',' xtick ',' ytick ',' grid ',' legend '等等。之后可以根据关键字参数的顺序指定新的参数。字典是在程序中设置选项的简单方法:

font _ options = { ' family ':' monospace ',

重量':'粗体',

大小':' small'}

plt.rc

如果需要更深入的定制,参考全量选项,可以参考matplotlib的设置文件,位于matplotlib/mpl-data的路径。如果您自定义此文件并将其放在主路径中,然后将其作为。matplotlibrc,每次使用matplotlib都会被读取。

关于作者:韦斯·麦金尼是流行的Python开源数据分析库熊猫的创始人。他是Python数据社区和Apache软件基金会中Python/C++的活跃演讲者和开源开发者。他目前在纽约担任软件架构师。

本文节选自出版商授权的《Python数据分析》。

用Python扩展读取数据分析

点击上图学习购买

转载请联系微信:多哥丸子

推荐语言:Python数据分析经典畅销书新升级,首版中文版销量10万本。全面修订更新Python 3.6,涵盖熊猫、NumPy、IPython、Jupyter新版本。

问:你有什么制作图表的技巧?

转载/提交请联系:baiyu@hzbook.com

1.《python数据可视化 纯干货:手把手教你用Python做数据可视化(附代码)》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《python数据可视化 纯干货:手把手教你用Python做数据可视化(附代码)》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/junshi/1722862.html