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 _, png , pdf )
用于动画的交互式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
参数。此参数可用于根据给定的定位点进一步指定零位置。
这个 set_thetamin()
和 set_thetamax()
方法可用于限制绘制角度的范围,从而生成圆的扇区。
以前的版本允许包含负半径的绘图,负值仅用作标签,实际半径按配置的最小值移动。此版本还允许将负半径用于网格和滴答,以前这些网格和滴答被静默忽略。
径向刻度已修改为与圆形网格线平行,角度刻度已修改为与网格线平行。旋转勾号也很有用 标签 以匹配边界。打电话 ax.tick_params(rotation='auto')
将启用新行为:径向刻度线标签将平行于圆形网格线,角度刻度线标签将垂直于网格线(即平行于外部边界)。此外,勾号标签现在遵循之前只在笛卡尔图上工作的填充设置。因此, frac
参数 PolarAxes.set_thetagrids
不再应用。勾号填充可以用修改 pad
参数 Axes.tick_params
或 Axis.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 _, png , pdf )
改进¶
复选按钮小部件 get_status
功能¶
A get_status()
方法已添加到 matplotlib.widgets.CheckButtons
班级。这个 get_status
方法允许用户查询 CheckButtons
对象。
添加 fill_bar
参数 AnchoredSizeBar
¶
这个 mpl_toolkits
班 AnchoredSizeBar
现在有一个附加的 fill_bar
参数,它使大小栏成为实心矩形,而不是只绘制矩形的边框。默认值为 None
,并且默认情况下是否填充栏取决于 size_vertical
.如果 size_vertical
是非零的, fill_bar
将被设置为 True
.如果 size_vertical
则为零 fill_bar
将被设置为 False
. 如果要重写此默认行为,请设置 fill_bar
到 True
或 False
无条件地始终或从不使用填充的修补矩形作为尺寸栏。
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 _, png , pdf )
注释可以使用默认箭头样式¶
注释现在在设置时使用默认箭头样式 arrowprops={}
,而不是没有箭头(新行为实际上与文档匹配)。
Figure.Legend()可以在没有参数的情况下调用¶
调用 Figure.legend()
现在可以不用参数来完成。在这种情况下,将创建一个图例,其中包含图形中包含的所有轴上的所有艺术家。
新参数 清楚的 对于 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)
滴答标签已关闭,而不是不可见¶
在内部, Tick
的 label1On()
属性现在用于隐藏刻度标签,而不是设置刻度标签对象的可见性。这提高了整体性能并解决了一些问题。因此,如果需要显示这些标签, tick_params()
需要使用,例如
ax.tick_params(labelbottom=True)
三维条形图中的着色¶
一个新的 shade
参数已添加到3D bar
绘图方法。默认行为仍保留为对条进行着色,但现在用户可以选择设置 shade
到 False
.
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 _, png , pdf )
新的 which
参数用于 autofmt_xdate
¶
A which
方法的参数现在存在 autofmt_xdate()
. 这允许用户格式化 major
, minor
或 both
有选择地勾选标签。默认行为将旋转并对齐 major
滴答标签。
fig.autofmt_xdate(bottom=0.2, rotation=30, ha='right', which='minor')
的新图形参数 subplot2grid
¶
A fig
函数的参数现在存在 subplot2grid()
. 这允许用户指定创建子批次的位置。如果 fig
是 None
(默认)然后该方法将使用 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
文件。
内构件¶
新建TransformedPatchPath缓存对象¶
新增 TransformedPatchPath
提供转换 Patch
变成一个 Path
通过A Transform
在缓存结果路径时。如果补丁和转换都没有更改,则返回路径的缓存副本。
这门课与旧的不同 TransformedPath
因为它能够根据底层补丁刷新自己,而旧类使用不变的路径。
电影作者的抽象基类¶
新的 AbstractMovieWriter
类定义要用作 writer
在 matplotlib.animation.Animation.save()
方法。现有的 MovieWriter
类现在从新的抽象基类派生。
更严格地验证线条样式的RCPARAM¶
与线条样式相关的RCPARAM的验证 (lines.linestyle
, boxplot.*.linestyle
, grid.linestyle
和 contour.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
性能¶
路径简化更新¶
线条简化由 path.simplify
和 path.simplify_threshold
参数得到了改进。在绘制大量数据时,应该注意到更好的渲染性能(只要上面的参数是相应设置的)。只有路径的线段部分将被简化——如果您同时绘制标记并且在渲染速度方面遇到问题,则应考虑使用 markevery
选择权 plot
. 见 性能 有关详细信息,请参阅使用教程中的部分。
简化是通过迭代地将线段合并为一个向量,直到下一个线段与向量的垂直距离(在显示坐标空间中测量)大于 path.simplify_threshold
参数。因此,更高的 path.simplify_threshold
从而加快渲染时间。如果绘图只是为了探索数据而不是为了出版物质量,请使用像素完美绘图,然后值为 1.0
可以安全使用。如果你想确保你的图反映你的数据 确切地 ,那么你应该设置 path.simplify
错误和/或 path.simplify_threshold
到 0
. Matplotlib当前默认为保守值 1/9
,较小的值不太可能导致绘图中的任何可见差异。
C++中交叉口的实现¶
intersects_bbox()
已经在C++中实现,从而提高了自动放置图例的性能。