• 绘图与可视化--matplotlib API入门


    matplotlib API函数都位于matplotlib.pyplot模块中,本节代码中引入的约定为:impor matplotlib.pyplot as plt

    1.1 Figure和Subplot

    matplotlib的图像位域Figure对象中,可以使用plt.figure()创建一个新的Figure。不能通过Figure绘图,必须用add_subplot创建一个或多个subplot才行。

     1 # -*- coding:utf-8 -*-
     2 
     3 from matplotlib import pyplot as plt 
     4 
     5 fig = plt.figure()
     6 ax1 = fig.add_subplot(2, 2, 1)  #图像为2x2,当前选中的是4个subplot中的第一个
     7 plt.plot([1.5, 3.5, -2, 1.6])   
     8 ax2 = fig.add_subplot(2, 2, 2)
     9 ax3 = fig.add_subplot(2, 2, 3)
    10 # 默认在最后一个用过的subplot(ax3)上进行绘制
    11 # 'K--'是一个线性选项,告诉matplotlib绘制黑色虚线图
    12 plt.plot(randn(50).cumsum(), 'k--') 
    13 plt.show()

    显示的图像为:

     由于根据特定布局创建Figure和subplot是很常见的任务,于是出现了更常见的方法(plt.subplots),它可以创建一个新的Figure,并返回一个含有已创建的subplot对象的NumPy数组。

     1 >>> fig, axes = plt.subplots(2, 3) 
     2 >>> fig
     3 <Figure size 640x480 with 6 Axes>
     4 >>> axes
     5 array([[<matplotlib.axes._subplots.AxesSubplot object at 0x0000026BB87DE5F8>,  
     6         <matplotlib.axes._subplots.AxesSubplot object at 0x0000026BBB414780>,  
     7         <matplotlib.axes._subplots.AxesSubplot object at 0x0000026BBB446D30>], 
     8        [<matplotlib.axes._subplots.AxesSubplot object at 0x0000026BBB485320>,  
     9         <matplotlib.axes._subplots.AxesSubplot object at 0x0000026BBB4B28D0>,  
    10         <matplotlib.axes._subplots.AxesSubplot object at 0x0000026BBB4E5E80>]],
    11       dtype=object)
    12 >>>

    这种操作很方便,可以轻松对axes数组进行索引,就像一个二维数组一样,如axes[0, 1]。还可以通过sharex和sharey指定subplot应该具有相同的X轴或Y轴。在相同范围的数据时,很实用。否则matplotlib会自动缩放各图表的界限。下表是subplots方法的更多信息。

    参数

    说明

    nrows

    subplot的行数

    ncols

    subplot的列数

    sharex

    所有subplot应该使用相同的X轴刻度(调节xlim将会影响所有subplot)

    sharey

    所有subplot应该使用相同的Y轴刻度(调节ylim将会影响所有subplot)

    subplot_kw

    用于创建各subplot的关键字字典

    **fig_kw

    创建figure时的其它关键字,如plt.subplots(2, 2, figsize=(8, 6))

    1.2 调整subplot周围的间距

    默认情况下,matplotlib会在subplot外围留下一定的边距,并在subplot之间留下一定的间距。间距和图像的高度和宽度有关,因此,如果调整了图像大小,间距也会自动调整。例如Figure的subplots_adjust方法可以修改间距,这也是一个顶级函数。

    wspace和hspace用于控制宽度和高度的百分比,可以用作subplot之间的间距。

    下面举例将间距收缩到0。

    1 >>> fig, axes = plt.subplots(2, 2, sharex=True, sharey=Ture)  
    2 >>> for i in range(2):     
    3 ...     for j in range(2):
    4 ...         axes[i, j].hist(np.random.randn(500), bins=50, color='k', alpha=0.5)
    5 ...
    6 >>> plt.subplots_adjust(wspace=0, hspace=0) 
    7 >>> plt.show()

      可以看出,其中的轴标签重叠了,matplotlib不会检查标签是否重叠,对于这种情况,只能自己设置刻度位置和刻度标签。

    1.3 颜色、标记和线性

    matplotlib函数接受一组X和Y坐标,还可以接受一个表示颜色和线型的字符串缩写。如根据x和y绘制绿色虚线,可执行ax.plot(x, y, ‘g--’)。

    下面是通过更为明确的方式得到同样的效果:ax.plot(x, y, linestyle=’--’, color=’g’)。

    常用的颜色都有一个缩写,要使用其它颜色可以通过指定其RGB值的形式使用(如:’#CECECE’)。

    线型图还可以加上一些标记(marker),以强调实际的数据点。由于matplotlib创建的是连续的线型图(点与点之间插值),因此有时可能不太容易看出这是数据点的位置。标记也可放在格式字符串中,当标记类型和线型必须放在颜色后面。

    1 >>> plt.plot(np.random.randn(30).cumsum(), 'ko--')
    2 [<matplotlib.lines.Line2D object at 0x0000026BBD6FE2E8>]
    3 >>> plt.show()  

     

      也可以使用更为明确的方式:

    1 >>> plt.plot(np.random.randn(30).cumsum(), color='k', linestyle='dashed', marker='o')

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

    1 >>> data = np.random.randn(30).cumsum()
    2 >>> plt.plot(data, 'k--', drawstyle='steps-post', label='Default')
    3 [<matplotlib.lines.Line2D object at 0x0000026BBAE3DF28>]
    4 >>> plt.legend(loc='best')
    5 <matplotlib.legend.Legend object at 0x0000026BBD7E7C18>
    6 >>> plt.show()
    7 >>>

     

    1.4 刻度、标签和图例

    对于大多数的图表装饰项,其主要实现方式有二:使用过程型的pyplot接口以及更为面向对象的原生matplotlib API。

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

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

    所有这些方法都是对当前或最近创建的AxesSubplot起作用的。它们各自对应subplot对象上的两个方法,以xlim为例,就是ax.get_xlim和ax.set_xlim。

    1.5  设置标题、轴标签、刻度以及刻度标签

    要修改X轴的刻度,最简单的方法是使用set_xticks(刻度在数据范围中的哪些位置,也是刻度标签值)和set_xticklabels(将任何其它的值用作标签)。

     1 >>> fig = plt.figure()
     2 >>> ax = fig.add_subplot(1, 1, 1) 
     3 >>> ax.plot(np.random.randn(1000).cumsum())
     4 [<matplotlib.lines.Line2D object at 0x0000026BBFD03780>]
     5 >>> ticks = ax.set_xticks([0, 250, 500, 750, 1000])  #设置x轴标签
     6 >>> labels = ax.set_xticklabels(['one', 'two', 'three', 'four', 'five'], rotation=30, fontsize='small') #更改x轴标签
     7 >>> ax.set_title('My first matplotlib plot')  #设置标题
     8 Text(0.5, 1.0, 'My first matplotlib plot')
     9 >>> ax.set_xlabel('Stages')  #设置X轴名称
    10 Text(0.5, 0, 'Stages')
    11 >>> plt.show()

     

     set_xlabel用于为X轴设置一个名称。

    1.6  添加图例

    图例(legend)是另一种用于标识图表元素的重要工具。添加图例的方式有两种。

    (1)最简单的是在添加subplot道德是否传入label参数

     1 fig = plt.figure()
     2 ax = fig.add_subplot(1, 1, 1)
     3 
     4 ax.plot(np.random.randn(10), 'k', label='one')
     5 ax.plot(np.random.randn(10), 'g', label='two')
     6 ax.plot(np.random.randn(10), 'b', label='three')
     7 
     8 # 创建图例
     9 ax.legend(loc='best')  #确定图例的位置
    10 plt.show()

      

    1.7  注释以及在Subplot上绘图

    注释可以通过text、arrow和annotate等函数进行添加。text可以将文本绘制在图表的指定作表(x, y),还可以加上一些自定义格式:ax.text(x, y, ‘name’, family=’monospace’, fontsize=10)

    1 fig = plt.figure()
    2 ax = fig.add_subplot(1, 1, 1)
    3 data = np.random.randn(10).cumsum()
    4 max_value, max_index = [data.max(), data.argmax()]
    5 ax.plot(data, 'k--', label='text')
    6 
    7 ax.text(max_index, max_value, 'max value!', family='monospace', fontsize=10)
    8 
    9 plt.show()

     

    注释中可以含有文本也可以含有箭头。

    1.8 图形的绘制

    matplotlib有一些表示常见图形的对象。这些对象被称为块(patch)。完整的集合在matplotlib.patches。要在图表中创建一个图形,需要创建一个块对象shp,然后通过ax.add_patch(shp)将其添加到subplot中。

     1 fig = plt.figure()
     2 ax = fig.add_subplot(1, 1, 1)
     3 
     4 rect = plt.Rectangle((0.2, 0.75), 0.4, 0.15, color='k', alpha=0.3)
     5 circ = plt.Circle((0.7, 0.2), 0.15, color='b', alpha=0.3)
     6 pgon = plt.Polygon([[0.15, 0.15], [0.35, 0.4], [0.2, 0.6]], color='g', alpha=0.5)
     7 
     8 ax.add_patch(rect)
     9 ax.add_patch(circ)
    10 ax.add_patch(pgon)
    11 
    12 plt.show()

     

    1.9  将图表保存到文件

    利用plt.savefig可以将当前图表保存到文件,该方法相当于Figure对象的实例方法savefig,例如要将图表保存为SVG文件,只需要输入plt.savefig(‘figpath.svg’)。

    文件类型是通过文件扩展名推断出来的。在发布图片时最常用的两个重要的选项是dpi(控制“每英寸点数”分辨率和bbox_inches(可以剪除当前图表周围的空白部分))。如,要得到一张带有最小白边且分辨率为400DPI的PNG图片,可以:plt.savefig(‘figpath.png’, dpi=400, bbox_inches=’tight’)。savefig并非一定要写入磁盘,可以写入任何文件类型的对象,比如stringIO。

    下表是Figure.savefig()方法的参数及说明。

    参数

    说明

    fname

    含有文件路径的字符串或python的文件型对象。图像格式由摁键扩展名推断出

    dpi

    图像像素点(每英寸点数),默认为100

    facecolor、edgecolor

    图像的背景色,默认为“w”(白色)

    format

    显示设置文件格式(“png”、“pdf”、“svg”…)

    bbox_inches

    图表需要保存的部分,如果设置为“tight”,则将尝试剪除图表周围的空白部分

    1.10 matplotlib配置

    matplotlib自带一些配色方案,以及为生成出版质量的图片而设定的默认配置信息。几乎所有默认行为都可以通过一组全局参数进行自定义,它们可以管理图像大小、subplot边距、配色方案、字体大小、网格类型等。操作matplotlib配置系统的方式主要有两种。第一种python编程方式,即利用rc方法。比如将全局的图像默认大小设置为10x10,则:plt.rc(‘figure’, figsize=(10, 10))

    rc的第一个参数时希望自定义的对象,如“figure”、“axes”、“xtick”、“ytick”、“grid”、“legend”等。其后可以跟上一系列的关键字参数。最简单的方式是将这些选项写成一个字典:

    font_options = {‘family’: ‘monospace’, ‘weigt’: ‘bold’, ‘size’: ‘small’}

    plt.rc(‘font’, **font_options)

  • 相关阅读:
    把一件简单的事情做好你就不简单了
    一个经验尚浅的码农五年软件开发的一点自我总结,对工作五年的反思~
    我就是一名房地产经纪人!不是中介,谁能明白我们呢?
    我与父辈的酒局
    郎意难坚,侬情自热(文/王路)
    红灯须硬闯,马路要横穿(文/王路)
    孩子,你慢慢来
    职场六年后的一点点感言
    有幸见到一朵花的绽放
    当你遇到她
  • 原文地址:https://www.cnblogs.com/mrlayfolk/p/12258849.html
Copyright © 2020-2023  润新知