Matplotlib 1.5中的新功能

注解

Matplotlib1.5支持python 2.7、3.4和3.5

交互式OO使用

所有 Artist s现在通过调用来跟踪其内部状态是否已更改但未反映在显示中(“stale”) draw . 因此,可以实用主义地确定 Figure 需要在交互式会话中重新绘制。

促进互动使用 draw_all 方法已添加到 pyplot 它将重新绘制所有“过时”的数字。

为了方便交互式使用,Matplotlib现在注册一个函数,要么使用ipython的“post-execute”事件,要么使用标准python repl中的displayhook自动调用 plt.draw_all 就在控件返回到repl之前。这样可以确保draw命令被延迟并且只调用一次。

其结果是,对于交互式后端(包括 %matplotlib notebook )在交互模式下(与 plt.ion()

import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ln, = ax.plot([0, 1, 4, 9, 16])
plt.show()
ln.set_color('g')

将自动将绘图更新为绿色。对 Artist 对象也会这样做。

这是对Pyplot内部进行更大的整合和简化的第一步。

使用标记数据,如 Pandas 数据帧

以数组作为输入的绘图方法现在也可以处理带标签的数据并解包这些数据。

这意味着以下两个示例产生相同的图:

例子::

df = pandas.DataFrame({"var1":[1,2,3,4,5,6], "var2":[1,2,3,4,5,6]})
plt.plot(df["var1"], df["var2"])

例子::

plt.plot("var1", "var2", data=df)

这适用于大多数绘图方法,它们希望数组/序列作为输入。 data 可以是任何支持 __getitem__ (dictpandas.DataFrameh5py ,…)访问 array 类似于带字符串键的值。

除此之外,还进行了一些其他更改,这使得使用标记数据(例如 pandas.Series 更容易:

  • 用于绘制方法 label 关键字参数,其中一个数据输入被指定为标签源。如果用户不提供 label 该值对象将通过查找 name 属性。如果值对象没有 name 属性,但被指定为 data Kwarg,然后使用钥匙。在上面的示例中,这会导致 label="var2" 对于这两种情况。
  • plot() 现在使用 Series 而不是 np.arange(len(y)) 如果没有 x 提供了参数。

补充 axes.prop_cycle RCPARAMS的密钥

这是现在已弃用的更通用的形式 axes.color_cycle 帕拉姆现在,我们不仅可以循环使用颜色,还可以循环使用线条样式、阴影和任何其他艺术家属性。cycler符号用于定义属性循环。把Cyclers加在一起就像你一样 zip -将两个或多个属性循环组合在一起:

axes.prop_cycle: cycler('color', 'rgb') + cycler('lw', [1, 2, 3])

你甚至可以增加cyclers,就像使用 itertools.product 在两个或更多的财产循环。

../../_images/sphx_glr_color_cycle_0011.png

颜色循环

新彩色地图

所有四个作为新默认值的颜色映射都可用作 'viridis' (2.0中的新默认值) 'magma''plasma''inferno'

(Source code _, pngpdf

../../_images/whats_new_1-5-1.png

风格

添加了几个新样式,包括Seaborn项目中的许多样式。此外,为了准备即将发布的2.0样式更改,添加了“经典”和“默认”样式。对于这个版本,“默认”和“经典”样式是相同的。通过现在在脚本中使用它们,您可以帮助确保在将来的matplotlib升级过程中平稳过渡,以便在准备好时升级到时髦的新默认值!::

import matplotlib.style
matplotlib.style.use('classic')

“默认”样式将为您提供matplotlib的最新打印样式:

matplotlib.style.use('default')

后端

新后端选择

环境变量 MPLBACKEND 现在可以用来设置matplotlib后端。

WX后端已更新

WX后端现在可以与Wxpython Classic和 Phoenix .

wxpython classic必须至少是2.8.12版本,并且可以在python 2.x上运行。截至2015年5月,wxpython phoenix还没有正式发布,但是当前的快照可以在python 2.7+和3.4+上运行。

如果安装了多个版本的wxpython,那么用户代码负责设置wxpython版本。如何做到这一点在示例开头的注释中进行了解释。 嵌入wx#2 .

配置(RCPARAM)

增加了一些参数,改进了一些参数。

参数 描述
rcParams["xaxis.labelpad"], rcParams["yaxis.labelpad"] MPlot3D现在尊重这些参数
rcParams["axes.labelpad"] (default: 4.0) 轴和标签之间的默认间距
rcParams["errorbar.capsize"] (default: 0.0) 误差线端盖的默认长度
rcParams["xtick.minor.visible"] (default: False), rcParams["ytick.minor.visible"] (default: False) 次要X/Y刻度的默认可见性
rcParams["legend.framealpha"] (default: 0.8) 图例框架框的默认透明度
rcParams["legend.facecolor"] (default: 'inherit') 图例框架框的默认面颜色(或 'inherit'rcParams["axes.facecolor"] (default: 'white') )
rcParams["legend.edgecolor"] (default: '0.8') 图例框架框的默认边缘颜色(或 'inherit'rcParams["axes.edgecolor"] (default: 'black') )
rcParams["figure.titlesize"] (default: 'large') 图形标题的默认字体大小
rcParams["figure.titleweight"] (default: 'normal') 图形标题的默认字体粗细
rcParams["image.composite_image"] (default: True) 在保存时,矢量图形后端是否应将多个图像组合成单个图像。当需要在Inkscape或其他程序中进一步编辑文件时很有用。
rcParams["markers.fillstyle"] (default: 'full') 标记的默认填充样式。可能的值是 'full' (违约), 'left''right''bottom''top''none'
rcParams["toolbar"] (default: 'toolbar2') 补充 'toolmanager' 作为有效值,启用 ToolManager 特征。

小部件

选择器的活动状态

所有选择器现在执行 set_activeget_active 方法(在访问 active 属性)正确更新和查询它们是否处于活动状态。

感动 ignoreset_activeget_active 方法到基类 Widget

将子类中的重复方法向上推到父类,以避免代码重复。

向MultiCursor添加启用/禁用功能

创建多主体对象后,可以禁用(并启用)该对象,而不破坏该对象。例子::

multi_cursor.active = False

改进的矩形选择器和新的椭圆选择器小部件

添加一个 互动式 关键字,该关键字允许在绘制形状后使用可见句柄来操作形状。

为以下项添加键盘修饰符:

  • 移动现有形状(默认键为“空格”)。
  • 使形状变为方形(默认为“shift”)。
  • 使初始点成为形状的中心(默认为“control”)。
  • 方形和中心可以组合

允许艺术家在光标中显示像素数据

添加 get_cursor_dataformat_cursor_data 方法将zdata添加到状态栏中的光标显示中。还为图像添加了一个实现。

新绘图功能

自动换行文字

在文本中添加关键字参数“wrap”,它在绘制时自动打断长文本行。适用于任何旋转文本、不同的对齐模式以及标签或标题文本。这是在 Figure 不是 Axes 边缘。

(Source code _, pngpdf

../../_images/whats_new_1-5-2.png

轮廓图角遮罩

伊恩托马斯重写C++代码,计算轮廓以增加对角落掩蔽的支持。这由一个新的关键字参数控制 corner_mask 在函数中 contour()contourf() . 以前的行为,现在用 corner_mask=False ,是为了一个单独的蒙面点完全掩盖所有四个四次接触该点。新行为,通过 corner_mask=True ,只隐藏与该点接触的四边形的角;包含三个未屏蔽点的任何三角形角都像往常一样被轮廓化。如果 corner_mask 未指定关键字参数,默认值取自RCPARAM。

../../_images/sphx_glr_contour_corner_mask_0011.png

轮廓角遮罩

主要是统一的线条样式 Line2DPatchCollection

线、面片和集合的线型处理已统一。现在它们都支持使用短符号(如“--”)以及全名(如“虚线”)定义线型。使用破折号模式的定义 ((0., [3., 3.]) )所有方法都支持使用 Line2DPatchCollection .

图例标记顺序

添加了将标签放在图例框中标记之前的功能, markerfirst 关键字

支持多集合和堆叠图的图例

增加了一个 legend_handler 对于 PolyCollection 以及A 标签 参数 stackplot() .

支持mplot3d震颤图中的备用支点

增加了一个 pivot 克瓦格 quiver() 它控制震动线围绕其旋转的轴点。这也决定了箭头沿震动线的位置。

罗吉特量表

增加了对“logit”轴比例的支持,非线性转换

\[x->\log10(x/(1-x))。\]

排除0和1之间的数据。

添加步骤kwargs以填充

补充 step 克瓦格 Axes.fill_between 允许在使用“阶梯”绘制样式绘制的线条之间填充。价值观 step 与…相匹配 where 克沃格 Axes.step . Kwargs名称的不对称性并不理想,但 Axes.fill_between 已经有了 where 克瓦格

这对于绘制预先分类的柱状图特别有用。

../../_images/sphx_glr_filled_step_0011.png

填充台阶

方格图

在轴函数中实现了作为新参数的方形图特征。当指定参数“square”时,将设置相等的缩放比例,并将限制设置为 xmax-xmin == ymax-ymin .

(Source code _, pngpdf

../../_images/whats_new_1-5-3.png

更新了FigImage以获取可选的调整大小参数

添加了使用 plt.figimage(X, resize=True) . 这对于绘制不带轴或围绕图像的空白的简单二维数组很有用。

(Source code _, pngpdf

../../_images/whats_new_1-5-4.png

更新的figure.savefig()现在可以使用figure的dpi

增加了使用与屏幕上的图形相同的dpi保存图形的支持 dpi='figure' :.

例子::

f = plt.figure(dpi=25)  # dpi set to 25
S = plt.scatter([1,2,3],[4,5,6])
f.savefig('output.png', dpi='figure')  # output savefig dpi set to 25 (same as figure)

更新表格以控制边缘可见性

添加了切换表中行的可见性的功能。功能添加到 pyplot.table 关键字参数“edges”下的工厂函数。值可以是字符串“open”、“closed”、“horizontal”、“vertical”或字母“l”、“r”、“t”、“b”的组合,分别表示左、右、上和下。

例子::

table(..., edges="open")  # No line visible
table(..., edges="closed")  # All lines visible
table(..., edges="horizontal")  # Only top and bottom lines visible
table(..., edges="LT")  # Only left and top lines visible.

绘图线框中的零R/C驾驶支持

AdamHughes为mplot3d的绘图线框添加了支持,只绘制行或列的线图。

(Source code _, pngpdf

../../_images/whats_new_1-5-5.png

带标签的绘图条和条形图

加克沃格 tick_labelbarbarh 以支持为每个条形图绘制带有文本标签的条形图。

(Source code _, pngpdf

../../_images/whats_new_1-5-6.png

在饼图中添加了中心和框架Kwargs

这些控件控制饼图的中心位置以及是否显示轴框架。

固定的三维填充轮廓图多边形渲染

某些情况下,生成带有多个孔的多边形的三维填充轮廓图会由于路径信息丢失而产生不正确的渲染。 PolyCollectionPoly3DCollection . 函数 set_verts_and_codes() 添加以允许保留路径信息以便正确呈现。

密集的彩条被栅格化

矢量文件格式(PDF、PS、SVG)对于许多类型的打印元素都是有效的,但对于某些类型的打印元素,它们可能会产生过大的文件大小,甚至渲染工件,这取决于用于屏幕显示的渲染器。这对于显示大量阴影的颜色条来说是个问题,最常见的情况就是这样。现在,如果一个颜色条显示50种或更多颜色,它将在向量后端进行栅格化。

日期格式化程序strftime

DateFormatter__call__() 方法将格式化 datetime.datetime 将格式字符串传递给格式化程序的构造函数的对象。此方法接受1900之前年份的日期时间,与 datetime.datetime.strftime() .

Artist-level {get,set}_usetex

添加 {{get,set}}_usetex 方法到 Text 允许艺术家级控制LaTeX渲染与内部mathtex渲染的对象。

Axes.remove() 按预期工作

与添加到 AxesAxes 对象可以通过 remove() .

locators set_params()函数中的API一致性修复

set_params() 函数,它在 Locator 类型实例,现在可供所有人使用 Locator 类型。该实现还通过严格定义用户可以设置的参数来防止不安全的使用。

使用,呼叫 set_params() 在一 Locator 具有所需参数的实例:::

loc = matplotlib.ticker.LogLocator()
# Set given attributes for loc.
loc.set_params(numticks=8, numdecs=8, subs=[2.0], base=8)
# The below will error, as there is no such parameter for LogLocator
# named foo
# loc.set_params(foo='bar')

日期定位器

日期定位器(源自 DateLocator )现在实施 tick_values 方法。这是所有源于 Locator .

现在可以轻松使用日期定位器而不创建轴:

from datetime import datetime
from matplotlib.dates import YearLocator
t0 = datetime(2002, 10, 9, 12, 10)
tf = datetime(2005, 10, 9, 12, 15)
loc = YearLocator()
values = loc.tick_values(t0, tf)

Offsetbox现在支持剪辑

Artist 在类型的对象上绘制 OffsetBox 通过 DrawingAreaTextArea . 这个 TextArea 计算文本所需的空间,使文本始终在边界内,因此没有任何更改。

然而, DrawingArea 充当零个或多个的父级 Artist 有人利用它,并可能这样做超越界限。现在孩子 Artist s可以被裁剪到 DrawingArea .

现在,通过紧凑的布局考虑了场外交易箱

什么时候? tight_layout()Figure.tight_layoutGridSpec.tight_layout() 被称为 OffsetBox 锚定在轴外的孔不会被切掉。这个 OffsetBox 如果有多个子图,es也不会被其他轴重叠。

每页PDF多页PDF笔记(PDF页)

添加新方法 attach_note() 到pdf pages类,允许将简单的文本注释附加到多页PDF图中的页面。在具有此功能(Adobe Reader、OSX Preview、Skim等)的查看器中,可以在PDF注释列表中看到新注释。默认情况下,注释本身不分页,以防止它出现在打印输出中。

PdfPages.attach_note 之前需要打电话 savefig 以便添加到正确的数字中。

更新后的Fignum_存在以获取图形名称

添加了使用图形名称而不仅仅是图形编号来检查图形是否存在的功能。例子::

figure('figure')
fignum_exists('figure') #true

ToolManager

费德里科·阿里扎写了新的 ToolManager 作为替代品 NavigationToolbar2

ToolManager 提供了一种查看用户与图形交互的新方法。在我们之前 NavigationToolbar2 用自己的工具 zoom/pan/home/save/... 而且我们还有捷径 yscale/grid/quit/.... . ToolManager 将所有这些操作重新定位为 Tools (位于 backend_tools ),并定义访问/触发/重新配置它们的方法。

这个 Toolbars 替换为 ToolContainers 这只是GUI接口 trigger 工具。但别担心,默认后端包括 ToolContainer 打电话 toolbar

注解

目前,我们主要是出于反馈的目的而发布这个版本,并且应该被视为实验性的,直到出现API更改的进一步通知。目前 ToolManager 仅适用于GTK3和Tk后端。一定要用那种。其他后端的端口很快就要到了。

激活 ToolManager 在文件顶部包括以下内容:

>>> matplotlib.rcParams['toolbar'] = 'toolmanager'

与工具容器交互

最重要的功能是能够轻松地重新配置工具容器(即工具栏)。例如,如果我们想删除“前进”按钮,我们只需要这样做。::

>>> fig.canvas.manager.toolmanager.remove_tool('forward')

现在,如果要以编程方式触发“主页”按钮:

>>> fig.canvas.manager.toolmanager.trigger_tool('home')

工具管理器的新工具

可以向工具管理器添加新工具

打印“你很棒”的一个非常简单的工具是:

from matplotlib.backend_tools import ToolBase
class AwesomeTool(ToolBase):
    def trigger(self, *args, **kwargs):
        print("You're awesome")

将此工具添加到 ToolManager

>>> fig.canvas.manager.toolmanager.add_tool('Awesome', AwesomeTool)

如果我们想为工具添加快捷方式(“d”)。

>>> fig.canvas.manager.toolmanager.update_keymap('Awesome', 'd')

将其添加到组“foo”内的工具栏

>>> fig.canvas.manager.toolbar.add_tool('Awesome', 'foo')

还有第二类工具,“可切换工具”,这与我们的基本工具几乎相同,只是属于一个组,并且在该组中是互斥的。用于衍生自 ToolToggleBase 有两种基本方法 enabledisable 当它被切换时自动调用。

完整示例位于 刀具管理器

cBook.is_-sequence_of_-strings识别字符串对象

这主要是 Pandas 存储字符串序列的方式:

import pandas as pd
import matplotlib.cbook as cbook

a = np.array(['a', 'b', 'c'])
print(cbook.is_sequence_of_strings(a))  # True

a = np.array(['a', 'b', 'c'], dtype=object)
print(cbook.is_sequence_of_strings(a))  # True

s = pd.Series(['a', 'b', 'c'])
print(cbook.is_sequence_of_strings(s))  # True

之前,最后两张照片返回错误。

新的 close-figs plot指令的参数

Matplotlib有一个Sphinx延伸 plot_directive 它创建了包含在 Sphinx 文档中的绘图。matplotlib 1.5向plot指令添加新选项- close-figs -这将在创建绘图之前关闭所有以前的图形窗口。这有助于在使用时避免一些令人惊讶的绘图重复。 plot_directive .

支持URL字符串参数 imread

这个 imread() 函数现在接受指向远程PNG文件的URL字符串。这将直接绕过httpResponse对象的生成。

IPython笔记本中动画的显示挂钩

Animation 实例获得了 _repr_html_ 方法支持在笔记本中显示动画。用于显示的方法由 animation.html rc参数,目前支持 nonehtml5 . none 是默认值,不显示。 html5 将动画转换为直接嵌入笔记本中的H264编码视频。

用户不希望使用 _repr_html_ 显示挂钩也可以手动调用 to_html5_video 方法获取HTML并使用IPython的 HTML 显示类:

from IPython.display import HTML
HTML(anim.to_html5_video())

建筑物的前缀pkg配置

到目前为止,pkg config的处理已经修复,现在可以使用环境变量设置它 PKG_CONFIG . 如果您的工具链有前缀,这一点很重要。这是一种简单的设置方式 CCCXX 在建造之前。下面是一个例子。

导出pkg_config=x86_64-pc-linux-gnu-pkg-config