精华内容
下载资源
问答
  • 内含matplotlib中文手册百度云下载链接,永久有效。适合新手学习python数据可视化——matplotlib入门。简单容易上手
  • Matplotlib中文手册.pdf

    2019-05-17 18:07:29
    全网最全Matplotlib中文文档指南, 没有之一。 涵盖所有的Matplotlib 函数。
  • matplotlib.pyplot.acorr(x, hold=None, **kwargs)自相关函数acorr(x, normed=True, detrend=mlab.detrend_none, usevlines=True, maxlags=10, **kwargs) #x 的自相关如果 normed = True,通过零滞后自相关规范数据...

    主要内容:

    函数:

    1. matplotlib.pyplot.acorr(x, hold=None, **kwargs)

    自相关函数

    acorr(x, normed=True, detrend=mlab.detrend_none, usevlines=True, maxlags=10, **kwargs) #x 的自相关

    如果 normed = True,通过零滞后自相关规范数据,x 通过非趋势可调用(默认没有归

    一化)的方式除趋势

    数据绘制形如 plot(lags, c, **kwargs)

    返回值是元组(lags, c, line),其中:

    ¥lags 是一个长度为 2×maxlags + 1 的滞后(lags)向量

    ¥C 是 2×maxlags + 1 的自相关向量

    ¥line 是一个 line2d 实例,通过 plot()返回

    默认 linestyle 是 None,默认的 marker 是'o',交叉相关性是通过 numpy.correlate()函

    数、mode = 2 实现的。

    若 usevlines 是 True, vlines()将被调用(而不调用 plot()函数),用来绘制从起点

    到 acorr 的垂线。否则,plot()由 Line2D properties 属性参数(kwargs)决定。

    maxlags 是正整数,决定 lags 的显示数目。默认值 None 将返回(2×len(x)- 1)

    个 lags,返回值是一个元组(lags, c, linecol, b),其中:

    linecol 是 linecollection

    b 是 x-axis

    其他参数参见 Line2D的 kwargs 属性

    2 . matplotlib.pyplot.annotate(*args, **kwargs)

    创建一个文本注释:从指定点指向目标点

    annotate('注释内容', xy, xytext=None,xycoords='data',textcoords='data', arrowprops=None, **kwargs)

    xy:被注释点的位置,xytext:注释文本的位置坐标

    xycoords 和 textcoords 是字符串,指示 xy 和 xytext 的坐标关系:

    Property Description

    ‘figure points’

    points from the lower left corner of the

    figure

    起点从 figure 左下角

    ‘figure pixels’

    pixels from the lower left corner of the

    figure

    pixels(像素)从 figure 左

    下角

    ‘figure fraction’

    0,0 is lower left of figure and 1,1 is upper

    right

    (0,0)是 figure 的左下

    方,(1,1)是右上方

    ‘axes points’ points from lower left corner of axes 起点从 axes 的左下方

    ‘axes pixels’ pixels from lower left corner of axes

    pixels(像素)从 axes 左

    下角

    ‘axes fraction’

    0,0 is lower left of axes and 1,1 is upper

    right

    (0,0)是 axes 的左下方,

    (1,1)是右上方

    ‘data’

    use the coordinate system of the object

    being annotated (default)

    使用被注释对象的坐标系 统

    ‘offset points’

    Specify an offset (in points) from the xy

    value

    从 xy 点指定一个偏移量

    ‘polar’

    you can specify theta, r for the

    annotation, even in cartesian plots. Note

    that if you are using a polar axes, you do

    not need to specify polar for the

    coordinate system since that is the native

    “data” coordinate system.

    即使在直角坐标系,也可

    以指定(θ,r)的值。如果

    使用极坐标,不需要指定

    极点

    通用箭头属性:

    Key Description

    width the width of the arrow in points 箭头宽度

    frac

    the fraction of the arrow length occupied

    by the head

    箭头尖端(头部)所占比

    headwidth

    the width of the base of the arrow head in

    points

    箭头尖端的尾部宽度

    shrink

    oftentimes it is convenient to have the

    arrowtip and base a bit away from the

    text and point being annotated. If d is the

    distance between the text and annotated

    point, shrink will shorten the arrow so

    the tip and base are shink percent of the

    distance d away from the endpoints. ie,

    shrink=0.05 is 5%

    缩短箭头,以容纳文字。

    Shrink=0.05 表示缩短 5%

    ?kwargs any key for matplotlib.patches.polygon

    通用绘图参数,包括

    facecolor、alpha 等,可查

    询 kwargs 表格。

    花式箭头参数:

    Key Description

    arrowstyle the arrow style 箭头风格

    connectionstyle the connection style

    relpos default is (0.5, 0.5) 默认(0.5,0.5)

    patchA default is bounding box of the text 默认边界框

    patchB default is None 默认无

    shrinkA default is 2 points 默认 2

    shrinkB default is 2 points 默认 2

    mutation_scale default is text size (in points) 默认为字体大小

    mutation_aspect default is 1. 默认为 1 ? any key for matplotlib.patches.PathPatch

    其他参数参见 kwargs

    3. matplotlib.pyplot.arrow(x, y, dx, dy, hold=None, **kwargs) 为 axes 添加箭头

    arrow(x, y, dx, dy, **kwargs)

    绘制指定的箭头从(X,Y)指向(X + Y + dx,dy)。常用的参数:

    width(箭头尾部宽度): 浮点数 (默认: 0.001)

    length_includes_head(length 值

    是否包含 head[箭头尖部]):

    [True | False] (默认: False)

    head_width(箭头 head 宽度): float(浮点数)或 None (默认: 3*width)

    head_length: float(浮点数)或 None (默认: 1.5 * head_width)

    shape(箭头形状):

    [‘full’('完整的'), ‘left’('左半部分'), ‘right’('右半部分')]

    (default: ‘full’)

    overhang(箭头尖端形状): float(浮点数) (默认: 0)可以是负值,也可以大于 1

    head_starts_at_zero:

    [True | False] (默认: False)如果为 True,箭头尖部起

    点在坐标 0 点,而 False 则终点在坐标 0 点

    展开全文
  • 这是从Matplotlib的英文手册中翻译过来的中文手册,由于时间仓促,浅浅词汇量有限。因此如果有哪里翻译的不好,请在评论区指出,谢谢。 用户指南中包含了五大部分: Matplotlib 的基本概念 图形组件 后端 交互模式...

    这是从 Matplotlib 的英文手册中翻译过来的中文手册,由于时间仓促,浅浅词汇量有限。因此如果有哪里翻译的不好,请在评论区指出,谢谢。

    用户指南中包含了五大部分:

    1. Matplotlib 的基本概念
    2. 图形组件
    3. 后端
    4. 交互模式的相关说明
    5. 性能

    如果您喜欢 Matplotlib,并且苦于寻找不到中文手册的话,这个系列很适合您哦。

    使用指南

    本教程涉及了一些基础的图案样式用法以及最好的练习方式来帮助你开始学习 Matplotlib

    基本概念

    Matplotlib 具有广泛的代码库,可能会使得许多新用户望而却步。然而,绝大多数的 Matplotlib 函数可以通过相当简单的概念框架与少量的重要知识来理解。

    使用 Matplotlib 绘图有一系列的操作相关,从最普遍的操作开始,例如说把一个二维数组轮廓化,到更加细化的操作,比如说我们让屏幕上的散点像素变成红色,这就是从广义到狭义,从宽泛到具体。使用 Matplotlib 绘图程序包的目的是通过有用的控制手段来帮助您尽可能地轻松完成数据的可视化。尽管我们很多时候使用的是相对高级的程序命令,但是在您有需要的时候,也可以使用较为低级的程序指令来完成您所指派的可视化工作。

    因此,Matplotlib 采用层次结构来组成起代码库。顶部是它的状态机环境,由 matplotlib.pyplot 模块来提供。在这个层次上,使用简单的程序函数可以把线、图像、文本等相关绘图元素添加到当前程序所即将生成的可视化图形中。

    注意:    Pyplot 的状态机环境有点儿类似 MATLAB ,如果你曾经使用过 MATLAB ,并且具有相关经验那么学起来会非常快的。

    Matplotlib 顶部的下一层次是面对对象的界面,其中 pyplot 仅仅只是用于一些功能,比如说图形创建,用户可以显式创建并且跟踪定位到图形和轴对象。在这个层次上,用户可以使用 pyplot 来创建图形,通过这些图形,用户可以创建一个或者是多个轴对象。然后,这些轴对象都能用于大多数的绘图交互中。

    当然如果你们有需要的话,是可以将 pyplot 层直接删掉的,从而保存纯面向对象的方法用于进行更多地控制,比如说在 GUI 应用中嵌入由 Matplotlib 生成的图片。

    图形组件

    ![图形解剖][1]【此图源于 http://matplotlib.org,我对其中的英文内容做出了相关翻译标注。后续图片均由本文中的代码在线下亲自生成。】

    图形

    如上图,是一个完整的图形。这个图形会跟踪定位每一个子轴,以及一点点的特殊部分,比如说标题、图例等,哦,还有一个画布,实际上我们不怎么关心画布,因为你压根看不见它,它只是程序用来绘制图形用的,跟我们是没有关系的。但是要记住的是,一个图形可以有任意数量的轴线,但是至少要有一条轴,不然它就不是图形了。

    pyplot 是创建一个新图形最简单的办法:

    fig=plt.figure() #首先弄出一个没有轴线的空图fig.suptitle('No axes on this figure') #添加一个新的标题,也就是做一个记号,不然后面就忘了fig, ax_lst=plt.subplots(2,2) #这个图形是一个带有 2*2 轴的图形

    这就是您所认为的“绘图”了,它是一个具有数据的图像区域。一个给定的图形可以有很多很多的轴,但是给定的轴对象只能在一个图形中出现。轴包含两个或者三个轴对象(这里要注意轴和中轴之间的差异【也就是 AxesAxis 的差异】),这些轴对象负责控制对数据的限制(数据限制可以通过 set_xlim()set_ylim()这几个轴方法来控制)每一个轴对象都有标题,可使用 set_titile() 进行设置,还有使用 set_xlabel()set_ylabel() 对 X 轴和 Y 轴进行设置。

    这里再提一下,Axes 类及其成员函数是面对对象的主要接入点。

    中枢轴

    这个对象有点儿类似数字线。它们负责设置图形限制并且生成刻度以及刻度标签。刻度位置由 Lacator 对象确定,刻度标签字符串由 Formatter 格式化。刻度定位器和字符格式化程序之间的正确组合可以很好的控制刻度线的位置及其标签内容。

    美术内容

    当你使用 Matplotlib 进行绘图时,你就已经是一个可爱的艺术家了。基本上,你在图形上看见的所有内容都是美术作品,甚至包括图、轴和中枢轴对象。比较普通的就是比如说,Text 对象, Line2D 对象,collection 对象,Patch 对象等。在绘制完图形之后,所有的美术内容都会被绘制在画布上。绝大多数的美术内容是与轴捆绑在一起的,这样的美术内容没办法多轴共享,也不能轴对轴移动。

    绘图功能的输入类型

    所有的绘图功能,都希望是以 np.array 或者 np.ma.masked_array 作为输入的。“类似数组”的类,比如说 pandas 数据对象或者 np.matrix 可能就无法正常工作了。所以在绘制图形之前,请务必先把它们转换成 np.array 对象。

    举个例子,转换 pandas.DataFrame

    a = pandas.DataFrame(np.random.rand(4,5), columns = list('abcde'))a_asarray = a.values

    再举个例子,转换 np.matrix

    b = np.matrix([[1,2],[3,4]])b_asarray = np.asarray(b)

    Matplotlib, pyplot 和 pylab 之间有什么关系?

    Matplotlib 是一个完整的软件包,而 matplotlib.pyplotMatplotlib 中的一个模块。

    对于 pyplot 模块中的功能,始终有一个“当前”图形和轴(根据要求自动创建)。 例如,在下面的示例中,对 plt.plot 的第一次调用将创建轴,然后对 plt.plot 的后续调用将在同一轴上添加其他行,并且使用 plt.xlabelplt.ylabelplt.titleplt.legend 设置轴标签、标题和图例。

    x = np.linspace(0, 2, 100)plt.plot(x, x, label='linear')plt.plot(x, x**2, label='quadratic')plt.plot(x, x**3, label='cubic')plt.xlabel('x label')plt.ylabel('y label')plt.title("Simple Plot")plt.legend()plt.show()

    <center>![基本图示 1][2]</center>

    pylab 是一个便捷模块,可在单个命名空间中批量导入 matplotlib.pyplot(用于绘图)和 numpy(用于数学以及使用数组)。 pylab 已过时,并且由于命名空间的污染而强烈不建议使用 pylab,请使用 pyplot 代替。

    对于非交互式绘图,建议使用 pyplot 创建图形,然后使用面对对象接口进行绘图。

    编程风格

    查看本文档和示例时,您会发现不同的编码样式和使用模式。这些样式完全有效,各有利弊。几乎所有示例都可以转换为另一种样式并获得相同的结果。唯一的忠告,是请避免将您自己的代码的编码样式混合在一起。

    注意:    matplotlib 的开发人员必须遵循特定的样式和准则。 请参阅《 Matplotlib 开发人员指南》。

    在不同的代码风格中,有两种得到官方支持。因此,这两种是使用 Matplotlib 的首选风格。

    对于 pyplot 样式,导入的方式通常为:

    import matplotlib。pyplot as pltimport numpy as np

    然后调用其他函数时,比如说 np.arangenp.zerosnp.piplt.figureplt.plotplt.show 等。可以使用 pyplot 接口先创建图形,然后使用对象方法进行其他相关操作:

    x = np.arange(0, 10, 0.2)y = np.sin(x)fig, ax = plt.subplots()ax.plot(x, y)plt.show()

    <center>![基本图示 2][3]</center>

    那么,为什么要使用所有其他类型而不是 MATLAB 样式(依赖于全局状态和平面名称空间)呢?对于像此示例这样的非常简单的事物,唯一的优势是学术性:字词风格更加明确,对于事物的来源和发生的情况更加清楚。对于更复杂的应用程序,这种明确性和清晰度变得越来越有价值,并且更丰富,更完整的面向对象的界面将可能使程序更易于编写和维护。

    通常,人们会发现自己一遍又一遍地绘制相同的图,但是使用不同的数据集,这导致需要编写专门的函数来进行绘制。 推荐的函数名称类似于:

    def my_plotter(ax, data1, data2, param_dict):    out = ax.plot(data1, data2, **param_dict)    return outdata1, data2, data3, data4 = np.random.randn(4, 100)fig, ax = plt.subplots(1, 1)my_plotter(ax, data1, data2, {'marker': 'x'})#如果你希望输出图像的话,加上下面这句话plt.show()

    <center>![示例图像 3][4]</center>

    当然,如果你没有密集恐惧症的话,我推荐你试试两个子图:

    fig, (ax1, ax2) = plt.subplots(1, 2)my_plotter(ax1, data1, data2, {'marker': 'x'})my_plotter(ax2, data3, data4, {'marker': 'o'})

    <center>![示例图像 4][5]</center>

    那就先介绍到这里,后面还有关于后端的部分,我认为目前没有必要说了。

    后端

    什么是后端

    在官网和相关邮件列表上的许多文档都有提到“后端”,许多新用户对这个词很困惑。有些人从 python shell 交互使用 matplotlib,并且在键入命令后弹出绘图窗口;有些人运行 Jupyter notebooks 并绘制内联图以进行快速数据分析;有些人则将 matplotlib 嵌入到 wxpython 或 pygtk 等图形用户界面中,以构建丰富的应用程序;有些人在批处理脚本中使用 matplotlib 从数值模拟中生成可视化图形;还有一些人运行 Web 服务以动态地提供图形。

    为了支持上述的所有相关用例或相关操作,Matplotlib 针对不同的输出,给定了能支持这些操作的功能,我们统称为“后端”。“前端”是用户面对的代码,也就是绘图代码,比如说上面我们讲的那些的,而“后端”则是计算机在幕后进行的一些绘图工作。“后端”有两种类型:

    • 交互式后端:用于 pygtk,wxpython,tkiner,qt4,macosx。
    • 非交互式后端:主要适用于制作图像文件的硬拷贝后端,比如说 PNG,SVG,PDF 还有 PS 文件。

    Matplotlib 中有四种配置后端的方法。如果它们之间互相冲突,那么我们可以调用 use() 覆盖 matplotlibrc 中的设置。

    注意:    后端名称规范不区分大小写。"A" 和 "a" 是等效的。

    什么是交互模式

    使用交互式后端允许程序绘图到屏幕上,还有何时在屏幕上进行绘制,以及绘图结束之后程序会话是否还要继续,这些都取决于调用的函数以及 matplotlib 是否处于“交互模式”的状态下。默认状态的控制变量是由 matplotlibrc 文件设置的,可以进行任意的自定义调整,也可以通过 matplotlib.interactive() 进行设置,还能够使用 matplotlib.is_interactive() 查询相关变量的值。我们很少在程序命令的中间突然打开或者关闭“交互模式”,因此在下面的所有案例中,我们都假定“交互模式”是从一开始就默认打开或者默认关闭的,就是不会在中途突然关掉或者突然打开。

    注意:    在向 matplotlib 版本 1.0 过渡时,我们对交互性相关方面做出了重大更改,尤其是 show()的角色和行为。在这里,我们将主要描述版本 1.0.1 的交互式后端操作,但 macosx 的部分例外。

    顺带一提,交互模式使用 matplotlib.pyplot.ion() 打开,使用 matplotlib.pyplot.ioff() 关闭。

    注意:    交互式后端可以在 ipython 或者 python shell 中与合适的后端操作一起使用,但是在 idle 中不起作用。如果默认的后端不支持交互性,可以考虑显示激活交互式后端。

    交互案例

    在一般的 python 提示符下,或者在不带任何选项的情况下调用 ipython 之后,请尝试以下操作:

    import matplotlib.pyplot as pltplt.ion()plt.plot([1.6, 2.7])

    <center>![示例图像 5][6]</center>

    假设您当前正在运行的是 1.0.1 或更高版本,并且在默认情况下已安装并选择了一个交互式后端,则应该会看到上面这个图,并且终端提示也应处于活动状态。您可以键入其他命令,例如:

    plt.title("interactive test")plt.xlabel("index")

    <center>![示例图像 6][7]</center>

    您会在每行之后看到最早的图像正在更新。从 1.5 版开始,通过其他方式修改绘图也会自动更新。获取对 Axes 实例的引用,并调用该实例的方法如下:

    ax = plt.gca()ax.plot([3.1, 2.2])

    <center>![示例图像 7][8]</center>

    如果您使用某些后端(例如 macosx)或者较旧的 matplotlib 版本,则可能不会立即看到新线添加到刚刚所绘制的图像中。在这种情况下,您需要显式调用 draw() 来更新绘图:

    plt.draw()

    非交互模式

    与前面的示例一样,开始一个新的程序,但是现在关闭交互模式:

    import matplotlib.pyplot as pltplt.ioff()plt.plot([1.6, 2.7])

    啥都不会出现,如果想让它出现的话,你得加上一句话:

    plt.show()

    现在您看到了该图,但是您的终端命令行没有其他响应。这是因为 show() 命令将阻止其他命令的输入,直到您手动终止绘图窗口为止。

    非交互模式会延迟所有绘图,直到调用 show() 为止。这会比每次往脚本中添加新的一行功能时重新绘图来的更合理。

    在版本 1.0 之前,show() 通常不能在一个脚本中被多次调用,然而对于 1.0.1 以后的版本,这个限制就被接触了,因此可以编辑以下脚本:

    import numpy as npimport matplotlib.pyplot as pltplt.ioff()for i in range(3):    plt.plot(np.random.rand(10))    plt.show()

    上面这段代码所表示的含义是,绘制三次图像,当然第一次图像显示完成之后,随即进行下一次,然后用下一次的图像覆盖第一次的图像。

    总结

    在交互模式下,pyplot 函数会自动绘制图形到屏幕上。

    交互式绘图时,如果除了使用 pyplot 函数外还使用对象方法调用,则每当您要刷新绘图时都得调用 draw()

    在非交互模式下,使用 show() 显示图形并阻止新的脚本代码执行,直到您手动销毁之前生成的图形为止。

    性能

    无论是以交互方式浏览数据还是以编程方式保存大量绘图,渲染性能都可能成为一个痛苦的瓶颈。Matplotlib 提供了几种方法,以稍微改变绘制外观为代价,大大减少了渲染时间。减少渲染时间的可用方法取决于所创建图的类型。

    线段简化

    对于具有线段的图(例如典型的线图,多边形的轮廓等),可以通过 matplotlibrc 文件中的 path.simplifypath.simplify_threshold 参数来控制渲染性能。path.simplify 参数是一个布尔值,指示是否完全简化线段。path.simplify_threshold 参数控制简化的线段数量; 阈值越高,渲染越快。

    以下代码将首先显示数据而不进行任何简化,然后以简化的方式显示相同的数据:

    import numpy as npimport matplotlib.pyplot as pltimport matplotlib as mpl# Setup, and create the data to ploty = np.random.rand(100000)y[50000:] *= 2y[np.logspace(1, np.log10(50000), 400).astype(int)] = -1mpl.rcParams['path.simplify'] = Truempl.rcParams['path.simplify_threshold'] = 0.0plt.plot(y)plt.show()mpl.rcParams['path.simplify_threshold'] = 1.0plt.plot(y)plt.show()

    能够切实地体验到两次图像的出现速度是不一致的,第一次没有简化的图像出现的非常慢,第二次有进行简化的,速度很快。两个图形在视觉感官上的体验是很接近的。

    Matplotlib 当前默认的简化阈值是 $\frac{1}{9}$,如果要更改默认设置以使用其他值,可以更改 matplotlibrc文件进行相应设置。另外,您可以创建一种新样式(用于最大程度简化)交互式绘图。有关如何执行这些操作的说明,请参见使用样式表和 rcParams 用以自定义 Matplotlib 。

    简化工作是将线段迭代合并到单个矢量中,直到下一个线段到矢量的垂直距离(在坐标空间中测量)大于 path.simplify_threshold 参数。

    注意    在版本 2.1 中进行了有关简化线段的更改。在 2.1 之前的版本中,这些参数仍会改善渲染时间,但是在 2.1 及更高版本中,某些类型数据的渲染时间将得到比之前更大的改善。

    标记简化

    标记也可以简化,尽管不如线段那样子具有健壮性。简化标记仅适用于 Line2D 对象(通过 markevery 属性)。在传递 Line2D 构造参数的任何位置(例如 matplotlib.pyplot.plot()matplotlib.axes.Axes.plot()),都可以使用 markevery 参数:

    plt.plot(x, y, markevery=10)

    markevery 参数允许进行简单的二次采样,或尝试均匀间隔采样。有关更多信息,请参见 Markevery 演示。

    行分块

    如果使用的是 Agg 后端,则可以使用 agg.path.chunksize 的 rc 参数指定块的大小,任何大于多个顶点的线都将被拆分为多行,每行最多包含 agg.path.chunksize 个顶点。除非 agg.path.chunksize 为零,否则不进行分块。对于某些类型的数据,将行分块为合理的大小可以大大减少渲染时间。

    以下代码将首先显示没有任何块大小限制的数据,然后显示块大小为 10,000 的相同数据。当数字很大时,能看见很大的区别:

    import numpy as npimport matplotlib.pyplot as pltimport matplotlib as mplmpl.rcParams['path.simplify_threshold'] = 1.0# Setup, and create the data to ploty = np.random.rand(100000)y[50000:] *= 2y[np.logspace(1,np.log10(50000), 400).astype(int)] = -1mpl.rcParams['path.simplify'] = Truempl.rcParams['agg.path.chunksize'] = 0plt.plot(y)plt.show()mpl.rcParams['agg.path.chunksize'] = 10000plt.plot(y)plt.show()

    图例

    默认图例会尝试查找覆盖最少数据点的位置 loc='best' 。如果有很多数据点,这可能要消耗很多算力。在这种情况下,您可能需要提供一个特定的位置以方便图形渲染。

    使用快捷样式

    快速样式可将简化和分块参数自动设置为合理的设定,以加快绘制大量数据的速度。只需运行以下命令即可使用它:

    import matplotlib.style as mplstylemplstyle.use('fast')

    它的代码量很小,因此可以与其他样式很好地配合,只要确保最后应用快速样式即可,这样其他样式就不会覆盖设置:

    mplstyle.use(['dark_background', 'ggplot', 'fast'])

    作为系列性翻译,我已开始着手进行下一部分 Pyplot tutorial 的相关翻译。点击此处可以跳转到 Usage Guide 的原版文献。

    阅读全文: http://gitbook.cn/gitchat/activity/5e6c9f0d41eb93159b00d4b9

    您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

    FtooAtPSkEJwnW-9xkCLqSTRpBKX

    展开全文
  • 这是从Matplotlib的英文手册中翻译过来的中文手册,由于时间仓促,浅浅词汇量有限。因此如果有哪里翻译的不好,请在评论区指出,谢谢。 在 Pyplot 教程中包含了五大部分: Pyplot 简介以及自定义用户样式 在绘图中...

    这是从Matplotlib的英文手册中翻译过来的中文手册,由于时间仓促,浅浅词汇量有限。因此如果有哪里翻译的不好,请在评论区指出,谢谢。

    在 Pyplot 教程中包含了五大部分:

    1. Pyplot 简介以及自定义用户样式
    2. 在绘图中会用到的关键字符串以及使用分类变量绘制图像
    3. 线条属性的设置与复合图像
    4. 文字处理(比如使用数学表达式、文本注释)
    5. 对数轴与其他非线性轴

    如果您喜欢Matplotlib,并且苦于寻找不到中文手册的话,这个系列很适合您哦。

    Pyplot 教程

    这是对 pyplot 接口的相关说明。

    Pyplot 简介

    matplotlib.pyplot 是使 Matplotlib 像 MATLAB 一样工作的命令样式函数的集合。每个 pyplot 函数都会对图形进行一些更改。比如说创建图形,在图形中创建绘图区域,在绘图区域中绘制一些线,用标签装饰您所绘制的图像等。

    matplotlib.pyplot 中,函数的调用会保留各种状态,以便跟踪当前图形和绘图区域内的图像挂件,并将绘图函数定向到当前轴。这里值得一提的是,这个轴指的是图形的轴部分,就是我们在第一章节中不断地讲到的,而不是数学意义上的

    注意:    pyplot API 通常不如 OO API 来的灵活轻巧。您在此处所看到的绝大多数的函数调用也可以称作是 Axes 对象中的方法调用。我们建议浏览相关教程和示例以了解其工作原理。

    使用 pyplot 来做数据可视化的速度非常快,比如说:

    import matplotlib.pyplot as pltplt.plot([1, 2, 3, 4])plt.ylabel('some numbers')plt.show()

    <center>![示例图像 9][9]</center>

    您可能很好奇为什么 X 轴的范围是 $x\in [0,3]$,而且 Y 轴的范围是 $y\in [1,4]$。这是因为如果您向 plot() 函数提供单个列表或者数组,则 matplotlib 会自动假定它是 Y 轴的序列,并自动为您产生 X 值。由于 Python 的范围从 0 开始,因此默认的 X 向量的长度会与 Y 轴相同,但从 X 是从 0 开始的。因此 X 轴的数据就是 $x\in [0,3]$。

    plot() 是一种通用命令,它能够接受任意数量的参数。比如说,您想要绘制 X 与 Y 的关系,那么可以用以下代码来进行操作:

    plt.plot([1,2,3,4],[1,4,9,16])

    <center>![示例图像 10][10]</center>

    所生成图形的 X 轴就会从 1 开始,而不是最初的默认值 0 。

    自定义您的绘图样式

    对于每一个 $(x,y)$ 参数对,都有一个可选的第三参数,它是表示图的颜色和线条类型的格式字符串。格式字符串的字母和符号都来自 MATLAB,您得将颜色字符串和线条字符串连接在一起。一开始的默认符号串是 ‘b-’,这是一条蓝色实线。假如说你想用红色圆圈来绘制以上内容,你可以使用下面的代码:

    plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')plt.axis([0, 6, 0, 20])plt.show()

    <center>![示例图像 11][11]</center>

    有关线型和格式字符串的完整 API,请参见 plot() 文档。上例中的 axis() 命令采用 [xmin, xmax, ymin, ymax] 的参数列形式。

    如果 matplotlib 仅限于使用列表,那对于数值处理来说是毫无用处的。一般来说,您会经常使用 numpy 数组。实际上,所有序列都在程序内部转换为 numpy 数组。下面的示例说明了在一个命令中使用数组绘制多行具有不同格式样式的线条情况。

    import matplotlib.pyplot as pltimport numpy as np# evenly sampled time at 200ms intervalst = np.arange(0., 5., 0.2)# red dashes, blue squares and green trianglesplt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')plt.show()

    <center>![示例图像 12][12]</center>

    绘图中的关键字符串

    在某些情况下,您会拥有一些带特定格式的数据,这种数据允许您使用字符串来访问特定的变量。比如说,numpy.recarray 或者 pandas.DataFrame

    Matplotlib 给予您 data 关键字以方便您为此类对象提供参数。如果您提供了的话,您就可以使用与这些变量相对应的字符串来生成您的图形,例如:

    import matplotlib.pyplot as pltimport numpy as npdata = {'a': np.arange(50),        'c': np.random.randint(0, 50, 50),        'd': np.random.randn(50)}data['b'] = data['a'] + 10 * np.random.randn(50)data['d'] = np.abs(data['d']) * 100plt.scatter('a', 'b', c='c', s='d', data=data)plt.xlabel('entry a')plt.ylabel('entry b')plt.show()

    <center>![示例图像 13][13]</center>

    使用分类变量绘制图像

    当然,您也可以使用分类变量来绘制您的图像。Matplotlib 允许您将分类变量直接传递给许多绘图函数,比如说:

    import matplotlib.pyplot as pltimport numpy as npnames = ['group_a', 'group_b', 'group_c']values = [1, 10, 100]plt.figure(figsize=(9, 3))plt.subplot(131)plt.bar(names, values)plt.subplot(132)plt.scatter(names, values)plt.subplot(133)plt.plot(names, values)plt.suptitle('Categorical Plotting')plt.show()

    <center>![示例图像 14][14]</center>

    线属性设置

    线具有很多很多可以设置的属性,比如说线宽啊,破折号样式啊,抗锯齿啊等等,这里大概地提一下几种设置线属性的方法,具体的相关 API 可以参见 matplotlib.lines.Line2D

    • 使用关键字
    plt.plot(x, y, linewidth=2.0)#官方原版英文教程中只给了上面这一句,我自己又亲自打了一个,如下所示:
    import matplotlib.pyplot as pltplt.plot([1, 2, 3, 4], [1, 4, 9, 16], linewidth=5.0) #参数序列依次对应的是 x, y, linewidthplt.axis([0, 6, 0, 20])plt.show()

    <center>![示例图像 15][15]</center>

    • 使用 Line2D 的设置方法,例如
    line, = plt.plot(x, y, '-')line.set_antialiased(False) # 关闭抗锯齿
    • 使用 setp() 命令。下面的示例使用 MATLAB 样式的命令在行列表上设置多个属性。setp 很明显地对对象列表或者单个对象进行了相关工作。您也可以使用 Pyhton 关键字参数或 MATLAB 样式的 (str,val) 对进行相关操作:
    lines = plt.plot(x1, y1, x2, y2)# 使用关键字plt.setp(lines, color='r', linewidth=2.0)# 或者使用 MATLAB 风格的串值对plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

    当然还有其他的相关参数案例,请移步到 API 。

    复合图像

    MATLAB 和 pyplot 都具有当前图形和当前轴的概念。所有的绘图命令均适用于当前轴。gca() 函数返回当前轴(一个 matplotlib.axes.Axes 实例);而 gcf() 则返回当前图形(一个 matplotlib.figure.Figure 实例)。但是您并不用为折腾这个是哪个而烦恼,因为所有操作都是在幕后的,您只需要考虑您的逻辑即可。下面是创建两个子图的相关代码:

    import matplotlib.pyplot as pltimport numpy as npdef f(t):    return np.exp(-t) * np.cos(2*np.pi*t)t1 = np.arange(0.0, 5.0, 0.1)t2 = np.arange(0.0, 5.0, 0.02)plt.figure()plt.subplot(211)plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')plt.subplot(212)plt.plot(t2, np.cos(2*np.pi*t2), 'r--')plt.show()

    <center>![示例代码 16][16]</center>

    这个 figure() 命令是可以选择的,在默认情况下将会创建一个 figure(1),就好比如果没有用户手动指定任意轴,就会默认创建一个 subplot(111)subplot() 命令指定了其内参数为 numrows, numcols, plot_number ,其中 plot_number 的范围是 $[1,(numrows×numcols)]$。如果 $(numrows×numcols)<10$,则 subplot() 命令中的逗号分隔是可选的,也就是说 subplot(211)subplot(2,1,1) 是等价的。

    您可以创建具有任意数量的子图和轴。如果要手动放置轴的话,也就是没有自动对齐到矩形网格上,可以使用 axes() 命令,这个命令能够将所有的值以分数形式表示的位置指定为 axes([left, bottom, width, height]) 。有关于手动放置轴的相关示例,可以参见 Axes Demo;如果是跟大量子图有关的,可以参见 基本子图 Demo 。

    当然,您可以通过多次调用 figure() 来创建多个图形,这些图形都带有递增的图形编号。与此同时,这些图形都可以包含多个轴与多个子图,如下所示:

    import matplotlib.pyplot as pltplt.figure(1)                # 第一张图形plt.subplot(211)             # 第一张图形的第一个子图plt.plot([1, 2, 3])plt.subplot(212)             # 第二个子图plt.plot([4, 5, 6])plt.figure(2)                # 第二张图形plt.plot([4, 5, 6])           plt.figure(1)               plt.subplot(211)             plt.title('Easy as 1, 2, 3') plt.show()

    <center>![示例图像 17][17]</center>

    最后,你可以使用 clf() 来清除当前图形;使用 cla() 来清除当前轴。

    值得一提的是,如果你需要制作大量的图形,推荐使用 close() 来显示关闭图形,否则这些图形并不会因为你把它的窗口关闭了就杀掉了进程,它会一直保存在 pyploy 的内部引用中,直到调用 close() 为止。

    文字处理

    text() 命令能够在任意位置添加文本,而 xlabel(),ylabel(),title() 则是在指定位置添加文本。例如:

    import matplotlib.pyplot as pltimport numpy as npmu, sigma = 100, 15x = mu + sigma * np.random.randn(10000)# the histogram of the datan, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)plt.xlabel('Smarts')plt.ylabel('Probability')plt.title('Histogram of IQ')plt.text(60, .025, r'$\mu=100,\ \sigma=15$')plt.axis([40, 160, 0, 0.03])plt.grid(True)plt.show()

    <center>![示例图像 18][18]</center>

    所有的 text() 命令都会返回一个 matplotlib.text.Text 实例。当然,你也可以使用 setp() 或者关键字参数来自定义属性。

    t = plt.xlabel('my data', fontsize=14, color='red')

    你可以在相关 API 中得到更详尽地说明。

    在文本中使用数学表达式

    Matplotlib 支持在任何文本中插入 TeX 方程,使用一对美元符号括起来的 TeX 表达式,例如:

    plt.title(r'$\sigma_i=15$')

    标题字符串前的 r 很重要。它表示该字符串是原始字符串,并且不将反斜杠视为 Python 转义。matplotlib 具有内置的 TeX 表达式解析器和布局引擎,并附带了自己的数学字体。其他的详细信息,请参见具体的 API 。因此在这里,您可以跨平台使用数学文本,而无需安装 TeX 。

    文本注释

    上面我们提到的只是基础的 text() 命令,这个命令能够将文本放置在轴上的任意位置。而文本其实是常常用来对某些功能进行注释的,annotate() 命令提供了一个注释的办法。在这里需要注意的是,参数 xy 表示的是所要注释的位置和文本 xytext 的位置。这两个参数都是 (x,y) 元组。

    ax = plt.subplot(111)t = np.arange(0.0, 5.0, 0.01)s = np.cos(2*np.pi*t)line, = plt.plot(t, s, lw=2)plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),             arrowprops=dict(facecolor='black', shrink=0.05),             )plt.ylim(-2, 2)plt.show()

    <center>![示例图像 19][19]</center>

    关于注释的其他问题,请参见具体的 API。

    对数轴与其他非线性轴

    matplotlib.pyplot 不仅仅支持线性数轴,还支持其他非线性数轴。更改数轴的方法很简单,下面就展示了四个图的相关示例,这四个图的 Y 轴数据相同但是比例不同。

    import matplotlib.pyplot as pltimport numpy as npfrom matplotlib.ticker import NullFormatternp.random.seed(19680801)y = np.random.normal(loc=0.5, scale=0.4, size=1000)y = y[(y > 0) & (y < 1)]y.sort()x = np.arange(len(y))plt.figure()# 线plt.subplot(221)plt.plot(x, y)plt.yscale('linear')plt.title('linear')plt.grid(True)# 对数plt.subplot(222)plt.plot(x, y)plt.yscale('log')plt.title('log')plt.grid(True)# 对称对数plt.subplot(223)plt.plot(x, y - y.mean())plt.yscale('symlog', linthreshy=0.01)plt.title('symlog')plt.grid(True)# 离散plt.subplot(224)plt.plot(x, y)plt.yscale('logit')plt.title('logit')plt.grid(True)plt.gca().yaxis.set_minor_formatter(NullFormatter())plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,                    wspace=0.35)plt.show()

    <center>![示例图像 20][20]</center>

    当然你也可以自主添加比例尺,详情请查看有关 API 。

    作为系列性翻译,我已开始着手进行下一部分 Sample plots in Matplotlib 的相关翻译。点击此处可以跳转到 Pyplot Tutorial 的原版文献

    阅读全文: http://gitbook.cn/gitchat/activity/5e7189429fe495234fa1acb3

    您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

    FtooAtPSkEJwnW-9xkCLqSTRpBKX

    展开全文
  • matplotlib 函数手册 中文PDF版,Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形 [1] 。 通过 Matplotlib,开发者可以仅需要几行代码,便可以生成绘图,...
  • matplotlib中文用户手册 飞龙译 只有user's guide,大多数人够用了 没有详细的API介绍 怎么要求那么多字?不够啊 怎么办?
  • 这个链接是matplotlib中文参考手册链接,非常详细,保存下来自己可以看
    展开全文
  • matplotlib手册

    2019-07-22 16:06:13
    资源名称:matplotlib手册内容简介:matplotlib手册 中文PDF版一书的目的是让你能快速知道怎么使用matplotlib,当然个人所总结的方法未必对于每个人都是容易接受的,但相信大多数人看完本书之后会对于matplotlib有一...
  • matplotlib使用手册.html

    2020-09-02 17:03:20
    本课程介绍了Python数据可视化库——Matplotlib,其中包括...Matplotlib库:图表基本构成要素、绘制线图、显示图形、显示中文和负号、设置线条颜色和风格、保存图片、绘制柱状图、绘制饼状图、绘制散点图、绘制子图表。
  • 一、前言..............................................................................................1二、matplotlib简介..................................................................................
  • pyplot 教程译者:飞龙matplotlib.pyplot是一个命令风格函数的集合,使matplotlib的机制更像 MATLAB。 每个绘图函数对图形进行一些更改:例如,创建图形,在图形中创建绘图区域,在绘图区域绘制一些线条,使用标签...
  • 最近自己经常遇到matplotlib的OO API和pyplot包混乱不分的情况,所以抽时间好好把matplotlib的文档读了一下,下面是大概的翻译和总结。很多基础的东西还是要系统地掌握牢固哇~~要素Figure就是整个图片,像弹出的...
  • 例如,要生成椭圆的图例键,而不是矩形键: from matplotlib.legend_handler import HandlerPatch import matplotlib.pyplot as plt import matplotlib.patches as mpatches class HandlerEllipse(HandlerPatch): ...
  • 原标题:matplotlib手册(1)-pyplot使用欢迎关注天善智能 hellobi.com,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习、问答、求职,一站式搞定!对商业智能BI、大数据分析挖掘、机器学习,python,...
  • 1、matplotlib导入 import matplotlib.pyplot as plt matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。 2、参数配置 axex: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示 ...

空空如也

空空如也

1 2 3
收藏数 58
精华内容 23
关键字:

matplotlib中文手册