掌握绘图基础语法与常用参数


掌握绘图基础语法与常用参数

在使用matplotlib时,我们使用以下的导入惯例:

在Jupyter中运行%matplotlib notebook(或在IPython中运行%matplotlib),我们就可以尝试生成一个简单的图形。

生成如下图形:

尽管seaborn等库和pandas内建的绘图函数可以处理大部分绘图的普通细节,但如果想在提供的函数选项之外进行定制,则需要学习一些matplotlib的API。

1、图片与子图

matplotlib所绘制的图位于图片(Figure)对象中。可以使用plt.figure生成一个新的图片:

在IPython中,一个空白的绘图窗口就会出现,但在Jupyter中则没有任何显示,直到我们使用一些其他命令。plt.figure有一些选项,比如figsize是确保图片有一个确定的大小以及存储到硬盘时的长宽比。

不能使用空白的图片进行绘图。你需要使用add_subplot创建一个或多个子图(subplot):

上面代码的意思是图片应该是2×2的(最多四个图形),并且选择了四个图形中的第一个(序号从1开始)。

注意:使用Jupyter notebook时,在每个单元格运行后,图表被重置,因此对于更复杂的图表,你必须将所有的绘图命令放在单个的notebook单元格中。

将下面这些代码在同一个单元格中运行:

当输入绘图命令plt.plot([1.5, 3.5, -2, 1.6]), matplotlib会在最后一个图片和子图(如果需要的话就创建一个)上进行绘制,从而隐藏图片和子图的创建。

‘k–’是用于绘制黑色分段线的style选项。fig.add_subplot返回的对象是Axes Subplot对象,使用这些对象可以直接在其他空白的子图上调用对象的实例方法进行绘图。

1.1 调整子图周围的间距

默认情况下,matplotlib会在子图的外部和子图之间留出一定的间距。这个间距都是相对于图的高度和宽度来指定的,所以如果你通过编程或手动使用GUI窗口来调整图的大小,那么图就会自动调整。

wspace和hspace分别控制的是图片的宽度和高度百分比,以用作子图间的间距。

2、颜色、标记和线类型

matplotlib的主函数plot接收带有x和y轴的数组以及一些可选的字符串缩写参数来指明颜色和线类型。

在字符串中指定颜色和线条样式的方式是方便的。在实践中,如果你以编程方式创建绘图,则可能不希望将字符串混合在一起以创建具有所需样式的图表。同样的图表可以使用更为显式的方式来表达。

有很多颜色缩写被用于常用颜色,可以通过指定十六进制颜色代码的方式来指定任何颜色(例如’#CECECE’)。

折线图还可以有标记用来凸显实际的的数据点。由于matplotlib创建了一个连续性折线图,插入点之间有时并不清除点在哪。标记可以是样式字符串的一部分,样式字符串中线类型、标记类型必须跟在颜色后面。

对于折线图,注意到后续的点默认是线性内插的。可以通过drawstyle选项进行更改。

运行代码后会有像这样的输出。matplotlib返回的对象引用了刚刚添加的图表子组件。很多时候可以安全地忽略这些输出。这里,由于向plot传递了label,可以使用plt.legend为每条线生成一个用于区分的图例。

3、刻度、标签和图例

对于大多数图表修饰工作,有两种主要的方式:使用程序性的pyplot接口(即matplotlib.pyplot)和更多面向对象的原生matplotlib API。

pyplot接口设计为交互式使用,包含了像xlim、xticks和xticklabels等方法。这些方法分别控制了绘图范围、刻度位置以及刻度标签。可以在两种方式中使用:

  1. 在没有函数参数的情况下调用,返回当前的参数值(例如plt.xlim()返回当前的x轴绘图范围)。
  2. 传入参数的情况下调用,并设置参数值(例如plt.xlim([0, 10])会将x轴的范围设置为0到10)。

3.1 设置标题、轴标签、刻度和刻度标签

为了讲解轴的自定义,先会生成一个简单图表,并绘制随机漫步:

要改变x轴刻度,最简单的方式是使用set_xticks和set_xticklabels。set_xticks表示在数据范围内设定刻度的位置,默认情况下,这些刻度也有标签。但是可以使用set_xticklabels为标签赋值:

rotation选项会将x轴刻度标签旋转30度。最后,set_xlabel会给x轴一个名称,set_titel会给子图一个标题。

3.2 添加图例

图例是用来区分绘图元素的另一个重要内容。有多种方式可以添加图例。最简单的方式是在添加每个图表时传递label参数:

legend方法有多个其他的位置参数loc。loc参数告诉matplotlib在哪里放置图表。如果你不挑剔,’best’是一个好选项,它会自动选择最合适的位置。如果取消图例中的元素,不要传入label参数或者传入label=’nolegend‘。

4、注释与子图加工

除了标准的绘图类型,你可能还会想在图表上绘制自己的注释,而且注释中可能会包含文本、箭头以及其他图形。你可以使用text、arrow和annote方法来添加注释和文本。text在图表上给定的坐标(x, y),根据可选的定制样式绘制文本:

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

绘制图形时有更多需要注意的地方。matplotlib含有表示多种常见图形的对象,这些对象的引用是patches。一些图形,比如Rectangle(矩形)和Circle(圆形),可以在matplotlib.pyplot中找到,但图形的全集位于matplotlib.patches。


评论区(0)

评论