0.98.0 版本变更#
matplotlib.image.imread()
现在不再总是返回 RGBA 数据——如果图像是亮度或 RGB,它将尽可能返回 MxN 或 MxNx3 数组。此外,uint8 不再总是强制转换为浮点数。重写了
matplotlib.cm.ScalarMappable
回调基础设施,以便使用matplotlib.cbook.CallbackRegistry
而不是自定义回调处理。ScalarMappable
的matplotlib.cm.ScalarMappable.add_observer
的任何用户都应改用matplotlib.cm.ScalarMappable.callbacksSM
CallbackRegistry
。新的 axes 函数和 Axes 方法提供了对绘图颜色循环的控制:
matplotlib.axes.set_default_color_cycle
和matplotlib.axes.Axes.set_color_cycle
。Matplotlib 现在要求 Python 2.4,因此
matplotlib.cbook
将不再提供set
、enumerate()
、reversed()
或izip
兼容函数。在 Numpy 1.0 中,bin 仅由左边缘指定。axes 方法
matplotlib.axes.Axes.hist()
现在对直方图使用未来 Numpy 1.3 的语义。提供binedges
时,最后一个值现在表示右上边缘,这在 Numpy 1.0 中默认隐式设置为正无穷。这也意味着最后一个 bin 默认不再包含上层异常值。新的 axes 方法和 pyplot 函数
hexbin()
是大型数据集的scatter()
的替代方案。它生成类似 2D 直方图的pcolor()
,但使用六边形 bin。在
matplotlib.ticker.MaxNLocator
中新增了 kwargsymmetric
,允许要求坐标轴以零为中心。工具包现在必须从
mpl_toolkits
导入(而不是matplotlib.toolkits
)
关于转换重构的说明#
0.98 系列的一个主要新功能是更加灵活和可扩展的转换基础设施,它使用 Python/Numpy 编写,而不是自定义 C 扩展。
这次重构的主要目标是让 Matplotlib 更容易扩展以支持新型投影。这主要是内部改进,可能的用户可见的更改尚未到来。
有关新转换框架的设计说明,请参见 matplotlib.transforms
。
为了提高效率,其中许多函数返回 Numpy 数组的视图。这意味着如果您保留对它们的引用,它们的内容可能会更改。如果您想存储其当前值的快照,请使用 Numpy 数组方法 copy()。
视图间隔现在仅存储在一个地方——在 matplotlib.axes.Axes
实例中,而不是同时存储在定位器实例中。这意味着定位器必须从其 matplotlib.axis.Axis
获取其限制,而 Axis 又从 Axes
查找其限制。如果定位器是临时使用且未分配给 Axis 或 Axes(例如,在 matplotlib.contour
中),则必须创建一个虚拟轴来存储其边界。调用 matplotlib.ticker.TickHelper.create_dummy_axis()
来执行此操作。
Pbox
的功能已与 Bbox
合并。其方法现在都返回副本而不是原地修改。
以下列出了将代码从旧转换框架更新到新转换框架所需的许多简单更改。特别是,返回副本的方法以过去时态的动词命名,而原地修改对象的方法以现在时态的动词命名。
matplotlib.transforms
#
旧方法 |
新方法 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
matplotlib.axes
#
旧方法 |
新方法 |
---|---|
|
|
|
|
|
|
|
已移除 |
Polar
类已移至 matplotlib.projections.polar
。
matplotlib.axes.Axes.get_position()
曾返回一个点列表,现在返回一个 matplotlib.transforms.Bbox
实例。
matplotlib.axes.Axes.set_position()
现在接受四个标量或一个 matplotlib.transforms.Bbox
实例。
由于重构允许两种以上尺度类型(“log”或“linear”),因此再设置切换开关没有意义了。Axes.toggle_log_lineary()
已被移除。
matplotlib.artist
#
旧方法 |
新方法 |
---|---|
|
|
matplotlib.artist.Artist.set_clip_path()
现在接受一个 matplotlib.path.Path
实例和一个将在裁剪前立即应用于路径的 matplotlib.transforms.Transform
实例。
matplotlib.collections
#
旧方法 |
新方法 |
---|---|
linestyle |
linestyles [6] |
线条样式现在像所有其他集合属性一样处理,即可以提供单个值或多个值。
matplotlib.colors
#
旧方法 |
新方法 |
---|---|
|
|
matplotlib.contour
#
旧方法 |
新方法 |
---|---|
|
|
matplotlib.figure
#
旧方法 |
新方法 |
---|---|
|
|
matplotlib.patches
#
旧方法 |
新方法 |
---|---|
|
|
matplotlib.backend_bases
#
旧方法 |
新方法 |
---|---|
|
|
|
|
|
matplotlib.backend_bases.GraphicsContextBase.get_clip_path()
返回一个形式为 (path, affine_transform) 的元组,其中 path 是一个 matplotlib.path.Path
实例,affine_transform 是一个 matplotlib.transforms.Affine2D
实例。
matplotlib.backend_bases.GraphicsContextBase.set_clip_path()
现在只接受一个 matplotlib.transforms.TransformedPath
实例。
RendererBase
#
新方法
已更改方法
draw_image(self, x, y, im, bbox)
现在是draw_image(self, x, y, im, bbox, clippath, clippath_trans)
已移除方法
draw_arc
draw_line_collection
draw_line
draw_lines
draw_point
draw_quad_mesh
draw_poly_collection
draw_polygon
draw_rectangle
draw_regpoly_collection