Matplotlib 2.1.0中的新功能

文档

示例已迁移到使用 sphinx gallery . 这样可以更好地混合示例中的散文和代码,提供链接以下载同时作为Python脚本和Jupyter笔记本的示例,并改进缩略图库。这些例子被重新组织成 教程 和A 绘图示例 .

许多文档字符串和示例已被澄清和改进。

新特点

字符串分类值

所有绘图函数现在都支持将字符串分类值作为输入。例如:

data = {'apples': 10, 'oranges': 15, 'lemons': 5, 'limes': 20}
fig, ax = plt.subplots()
ax.bar(data.keys(), data.values(), color='lightgray')

(Source code _, pngpdf

../../_images/whats_new_2-1-0-1.png

用于动画的交互式JS小部件

Jake Vanderplas的JSAnimation包已合并到Matplotlib中。这增加了Matplotlib HTMLWriter 类,用于生成适用于IPython笔记本的javascript HTML动画。默认情况下,可以通过设置 animation.html 钢筋混凝土参数 jshtml . 也可以叫 to_jshtml 方法手动转换动画。这可以用ipython显示 HTML 显示类:

from IPython.display import HTML
HTML(animation.to_jshtml())

这个 HTMLWriter 类还可以用于通过请求 html 作家。

极坐标图的增强

极轴变换已被大大重新考虑,以允许更多的自定义视图限制和刻度标记。视图限制的其他选项允许创建环空、扇形或二者的某种组合。

这个 set_rorigin() 该方法可用于提供最小绘图半径的偏移量,从而产生环空。

这个 set_theta_zero_location() 方法现在有一个可选的 offset 参数。此参数可用于根据给定的定位点进一步指定零位置。

../../_images/sphx_glr_polar_scatter_002.png

极轴偏移演示

这个 set_thetamin()set_thetamax() 方法可用于限制绘制角度的范围,从而生成圆的扇区。

../../_images/sphx_glr_polar_scatter_003.png

极地扇区演示

以前的版本允许包含负半径的绘图,负值仅用作标签,实际半径按配置的最小值移动。此版本还允许将负半径用于网格和滴答,以前这些网格和滴答被静默忽略。

径向刻度已修改为与圆形网格线平行,角度刻度已修改为与网格线平行。旋转勾号也很有用 标签 以匹配边界。打电话 ax.tick_params(rotation='auto') 将启用新行为:径向刻度线标签将平行于圆形网格线,角度刻度线标签将垂直于网格线(即平行于外部边界)。此外,勾号标签现在遵循之前只在笛卡尔图上工作的填充设置。因此, frac 参数 PolarAxes.set_thetagrids 不再应用。勾号填充可以用修改 pad 参数 Axes.tick_paramsAxis.set_tick_params .

Figure 现在上课了 subplots 方法

这个 Figure 班级现在有一个 subplots() 方法的行为与 pyplot.subplots() 但在现有的数据上。

元数据savefig关键字参数

savefig() 现在接受 metadata 作为关键字参数。它可以用于在图像元数据中存储键/值对。

  • 带agg后端的“png”
  • 带PDF后端的“PDF”(请参见 writeInfoDict() 获取支持的关键字列表)
  • “eps”和“ps”,带有ps后端(只接受“creator”密钥)
plt.savefig('test.png', metadata={'Software': 'My awesome software'})

占线光标

当Matplotlib渲染画布时,交互式GUI后端现在将光标更改为“忙碌”。

PolygonSelector

A PolygonSelector 类已添加到 matplotlib.widgets . 见 多边形选择器演示 有关详细信息。

补充 matplotlib.ticker.PercentFormatter

新的 PercentFormatter 格式化程序有一些很好的功能,比如能够从任意的数据比例转换为百分比、可自定义的百分比符号以及对小数点的自动或手动控制。

可复制的PS、PDF和SVG输出

这个 SOURCE_DATE_EPOCH environment variable can now be used to set the timestamp value in the PS and PDF outputs. See source date epoch .

或者,拨打 savefig 具有 metadata={'CreationDate': None} 将完全忽略PDF后端的时间戳。

迄今为止,已使用各种绘图元素测试了PS和PDF后端输出的可再现性,但仅测试了选项的默认值,如 {ps,pdf}.fonttype 它可以在较低的级别上影响输出,而不是使用mathtext或usetex功能。当Matplotlib调用外部工具(如PS蒸馏器或 Latex )时,它们的版本需要保持不变,以便于再现,并且它们可以添加Matplotlib控制之外的不确定性源。

对于SVG输出, svg.hashsalt RC参数已在早期版本中添加。此参数将SVG文件中的某些随机标识符更改为确定性标识符。此设置的缺点是,如果使用确定性标识符生成多个文件,并且这些文件最终成为一个较大文档的一部分,则这些标识符可能会发生冲突,并导致不同的部分相互影响。

这些特性现在在PDF和SVG后端的测试中启用,因此大多数测试输出文件(但不是全部)现在都是确定性的。

mplot3d的正交投影

Axes3D 现在接受 proj_type 关键字参数和具有方法 set_proj_type() . 默认选项是 'persp' 和以前一样,并提供 'ortho' 启用正交视图。

比较正交视图中垂直但透视视图中略微倾斜的Z轴。

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(4, 6))
ax1 = fig.add_subplot(2, 1, 1, projection='3d')
ax1.set_proj_type('persp')
ax1.set_title('Perspective (default)')

ax2 = fig.add_subplot(2, 1, 2, projection='3d')
ax2.set_proj_type('ortho')
ax2.set_title('Orthographic')

plt.show()

(Source code _, pngpdf

../../_images/whats_new_2-1-0-2.png

voxels mplot3d函数

Axes3D 现在有一个 voxels 方法,用于可视化布尔三维数据。使用可能包括绘制一个稀疏的三维热图,或可视化一个体积模型。

../../_images/sphx_glr_voxels_numpy_logo_001.png

体素演示

改进

复选按钮小部件 get_status 功能

A get_status() 方法已添加到 matplotlib.widgets.CheckButtons 班级。这个 get_status 方法允许用户查询 CheckButtons 对象。

添加 fill_bar 参数 AnchoredSizeBar

这个 mpl_toolkitsAnchoredSizeBar 现在有一个附加的 fill_bar 参数,它使大小栏成为实心矩形,而不是只绘制矩形的边框。默认值为 None ,并且默认情况下是否填充栏取决于 size_vertical .如果 size_vertical 是非零的, fill_bar 将被设置为 True .如果 size_vertical 则为零 fill_bar 将被设置为 False . 如果要重写此默认行为,请设置 fill_barTrueFalse 无条件地始终或从不使用填充的修补矩形作为尺寸栏。

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar

fig, ax = plt.subplots(figsize=(3, 3))

bar0 = AnchoredSizeBar(ax.transData, 0.3, 'unfilled', loc='lower left',
                       frameon=False, size_vertical=0.05, fill_bar=False)
ax.add_artist(bar0)
bar1 = AnchoredSizeBar(ax.transData, 0.3, 'filled', loc='lower right',
                       frameon=False, size_vertical=0.05, fill_bar=True)
ax.add_artist(bar1)

plt.show()

(Source code _, pngpdf

../../_images/whats_new_2-1-0-3.png

注释可以使用默认箭头样式

注释现在在设置时使用默认箭头样式 arrowprops={} ,而不是没有箭头(新行为实际上与文档匹配)。

倒刺和箭袋支持日期

当使用 quiver()barbs() 绘图方法,现在可以传递日期,就像其他方法一样 plot() . 这也允许这些函数处理需要应用单位转换的值。

Hexbin默认线条颜色

默认值 linecolor 的关键字参数 hexbin() 现在是 'face' 和供应 'none' 现在防止在六边形周围画线。

Figure.Legend()可以在没有参数的情况下调用

调用 Figure.legend() 现在可以不用参数来完成。在这种情况下,将创建一个图例,其中包含图形中包含的所有轴上的所有艺术家。

用于图例项的多个图例键

图例项现在可以包含多个图例项。扩展的 HandlerTuple 类现在接受两个参数: ndivide 按指定的节数划分图例区域; pad 更改图例键之间的填充。

../../_images/sphx_glr_legend_demo_004.png

多个图例键

新参数 清楚的 对于 figure()

当Pyplot函数 figure() 是用 num 参数,仅当不存在具有相同值的现有窗口时才创建新窗口。一个新的bool参数 清楚的 添加以显式清除其现有内容。这在交互式会话中特别有用。自从 subplots() 还接受来自的关键字参数 figure() ,也可用于:

import matplotlib.pyplot as plt

fig0 = plt.figure(num=1)
fig0.suptitle("A fancy plot")
print("fig0.texts: ", [t.get_text() for t in fig0.texts])

fig1 = plt.figure(num=1, clear=False)  # do not clear contents of window
fig1.text(0.5, 0.5, "Really fancy!")
print("fig0 is fig1: ",  fig0 is fig1)
print("fig1.texts: ", [t.get_text() for t in fig1.texts])

fig2, ax2 = plt.subplots(2, 1, num=1, clear=True)  # clear contents
print("fig0 is fig2: ",  fig0 is fig2)
print("fig2.texts: ", [t.get_text() for t in fig2.texts])

# The output:
# fig0.texts:  ['A fancy plot']
# fig0 is fig1:  True
# fig1.texts:  ['A fancy plot', 'Really fancy!']
# fig0 is fig2:  True
# fig2.texts:  []

指定要格式化为标量的最小值 LogFormatterMathtext

LogFormatterMathtext 现在包括指定一个最小值指数作为标量格式化的选项(即0.001而不是10-3

新建quiverkey angle关键字参数

作图 quiverkey() 现在承认 angle 关键字参数,用于设置绘制键箭头的角度。

颜色映射反转方法

方法 matplotlib.colors.LinearSegmentedColormap.reversed()matplotlib.colors.ListedColormap.reversed() 返回颜色映射的反向实例。这实现了一种将任何颜色映射反转的方法。

artist.setp (和 pyplot.setp 接受一个 file 参数

参数仅为关键字。它允许除 sys.stdout 待指定。它的工作原理和 file 参数 print .

streamplot 简化生成更可配置

现在可以配置流线的起点、方向和长度。这使得跟踪向量场的时间更长,并且可以在某些用例中增强流模式的可见性。

Axis.set_tick_params now responds to rotation

勾号标签旋转的批量设置现在可以通过 tick_params() 使用 rotation 关键字。

ax.tick_params(which='both', rotation=90)

滴答标签已关闭,而不是不可见

在内部, Ticklabel1On() 属性现在用于隐藏刻度标签,而不是设置刻度标签对象的可见性。这提高了整体性能并解决了一些问题。因此,如果需要显示这些标签, tick_params() 需要使用,例如

ax.tick_params(labelbottom=True)

三维条形图中的着色

一个新的 shade 参数已添加到3D bar 绘图方法。默认行为仍保留为对条进行着色,但现在用户可以选择设置 shadeFalse .

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

x = np.arange(2)
y = np.arange(3)
x2d, y2d = np.meshgrid(x, y)
x, y = x2d.ravel(), y2d.ravel()
z = np.zeros_like(x)
dz = x + y

fig = plt.figure(figsize=(4, 6))
ax1 = fig.add_subplot(2, 1, 1, projection='3d')
ax1.bar3d(x, y, z, 1, 1, dz, shade=True)
ax1.set_title('Shading On')

ax2 = fig.add_subplot(2, 1, 2, projection='3d')
ax2.bar3d(x, y, z, 1, 1, dz, shade=False)
ax2.set_title('Shading Off')

plt.show()

(Source code _, pngpdf

../../_images/whats_new_2-1-0-4.png

新的 which 参数用于 autofmt_xdate

A which 方法的参数现在存在 autofmt_xdate() . 这允许用户格式化 majorminorboth 有选择地勾选标签。默认行为将旋转并对齐 major 滴答标签。

fig.autofmt_xdate(bottom=0.2, rotation=30, ha='right', which='minor')

的新图形参数 subplot2grid

A fig 函数的参数现在存在 subplot2grid() . 这允许用户指定创建子批次的位置。如果 figNone (默认)然后该方法将使用 gcf() .

subplot2grid(shape, loc, rowspan=1, colspan=1, fig=myfig)

插入 fill_betweenx

这个 interpolate 方法的参数现在存在 fill_betweenx() . 这允许用户插入数据并填充交叉点中的区域,类似于 fill_between() .

新建关键字参数 sep 对于EngFormatter

一个新的 sep 关键字参数已添加到 EngFormatter 并提供一种方法来定义将在值与其单位之间使用的字符串。默认字符串为 " " 保留了以前的行为。此外,分隔符现在出现在值与其单位之间,即使没有si前缀。以前有一个bug导致字符串 "3.14V" 返回而不是预期的 "3.14 V" (使用默认行为)。

延伸 MATPLOTLIBRC 行为

环境变量现在可以指定包含 matplotlibrc 文件。

density 克瓦格到希斯特

这个 hist() 现在首选方法 densitynormed 为了控制是否应该对柱状图进行规范化,在上游更改为numpy之后。这将减少混淆,因为直方图的积分一直是1(而不是和或最大值)。

内构件

新建TransformedPatchPath缓存对象

新增 TransformedPatchPath 提供转换 Patch 变成一个 Path 通过A Transform 在缓存结果路径时。如果补丁和转换都没有更改,则返回路径的缓存副本。

这门课与旧的不同 TransformedPath 因为它能够根据底层补丁刷新自己,而旧类使用不变的路径。

电影作者的抽象基类

新的 AbstractMovieWriter 类定义要用作 writermatplotlib.animation.Animation.save() 方法。现有的 MovieWriter 类现在从新的抽象基类派生。

更严格地验证线条样式的RCPARAM

与线条样式相关的RCPARAM的验证 (lines.linestyleboxplot.*.linestylegrid.linestylecontour.negative_linestyle )现在有效地检查这些值是否为有效的线条样式。类字符串 'dashed''--' 可接受的,以及长度均匀的开关式油墨序列 [1, 1.65] . 在后一种情况下,偏移值是在内部处理的,应该 not 由用户提供。

新的验证方案替换了用于 contour.negative_linestyle cparams,仅限于 'solid''dashed' 线条风格。

验证不区分大小写。以下内容现在有效:

grid.linestyle             : (1, 3)   # loosely dotted grid lines
contour.negative_linestyle : dashdot  # previously only solid or dashed

脓包

自动测试已从 nosepytest.

性能

路径简化更新

线条简化由 path.simplifypath.simplify_threshold 参数得到了改进。在绘制大量数据时,应该注意到更好的渲染性能(只要上面的参数是相应设置的)。只有路径的线段部分将被简化——如果您同时绘制标记并且在渲染速度方面遇到问题,则应考虑使用 markevery 选择权 plot . 见 性能 有关详细信息,请参阅使用教程中的部分。

简化是通过迭代地将线段合并为一个向量,直到下一个线段与向量的垂直距离(在显示坐标空间中测量)大于 path.simplify_threshold 参数。因此,更高的 path.simplify_threshold 从而加快渲染时间。如果绘图只是为了探索数据而不是为了出版物质量,请使用像素完美绘图,然后值为 1.0 可以安全使用。如果你想确保你的图反映你的数据 确切地 ,那么你应该设置 path.simplify 错误和/或 path.simplify_threshold0 . Matplotlib当前默认为保守值 1/9 ,较小的值不太可能导致绘图中的任何可见差异。

C++中交叉口的实现

intersects_bbox() 已经在C++中实现,从而提高了自动放置图例的性能。