0.54的变化

matlab接口

DPI

一些后端使用了一个像素每英寸的黑客,我添加了尝试使图像在后端呈现一致。这只是复杂的事情。因此,您可能会发现有些字体大小和行宽与以前不同。抱歉给您带来不便。您应该将dpi设置为屏幕的精确值,以获得真正的大小。

彩色和散射

对matlab接口api进行了两次更改,都涉及到补丁绘图命令。为了提高效率,已重写pcolor和scatter以使用多边形集合,这是matplotlib.collections中的一组新对象,旨在有效处理大型对象集合。这些新的集合使构建大型散点图或PColor图成为可能,在Python级别没有循环,并且比它们的前辈快得多。原始的pcolor和scatter函数保留为pcolor_classic和scatter_classic。

pcolor的返回值是PolyCollection。矩形或其他面片上可用的大多数属性也可用于多集合,例如,可以说:

c = scatter(blah, blah)
c.set_linewidth(1.0)
c.set_facecolor('r')
c.set_alpha(0.5)

或:

c = scatter(blah, blah)
set(c, 'linewidth', 1.0, 'facecolor', 'r', 'alpha', 0.5)

因为集合是一个单独的对象,所以您不再需要遍历scatter或pcolor的返回值来设置整个列表的属性。

如果希望集合的不同元素在属性上有所不同,例如具有不同的线条宽度,请参阅matplotlib.collections,以了解如何将属性设置为序列的讨论。

对于散点图,大小参数现在和matlab一样位于点^2(点中符号的面积)中,而不是像以前那样位于数据坐标中。在数据坐标中使用大小导致了几个问题。因此,您需要相应地调整大小参数或使用scatter_classic。

数学文本间距

因为我不清楚的原因(我最终会修正)间距不再适用于字体组。但是,我添加了三个新的间距命令,它们补偿了这个''(常规空间)、'/'(小空间)和'hspace frac',其中frac是点中fontsize的一部分。您需要在字体字符串中引用空格,即:

title(r'$\rm{Histogram\ of\ IQ:}\ \mu=100,\ \sigma=15$')

对象接口-应用程序程序员

自标定

X轴和Y轴实例不再具有自动缩放视图。这些由axes.autoscale_视图处理

轴心创造

您不应该再使用OOAPI实例化自己的轴。相反,创建一个与之前一样的图形,代替:

f = Figure(figsize=(5,4), dpi=100)
a = Subplot(f, 111)
f.add_axis(a)

用途:

f = Figure(figsize=(5,4), dpi=100)
a = f.add_subplot(111)

也就是说,添加轴不再存在,替换为:

add_axes(rect, axisbg=defaultcolor, frameon=True)
add_subplot(num, axisbg=defaultcolor, frameon=True)

艺术家方法

如果定义自己的艺术家,则需要重命名“绘制”方法以绘制

包围盒

matplotlib.transforms.bound2d替换为matplotlib.transforms.bbox。如果要从左、下、宽、高(bound2d的签名)构造bbox,请使用matplotlib.transforms.lbwh_to_bbox,如中所示。

bbox=clickbbox=lbwh_to_bbox(左、下、宽、高)

bbox与bound2d具有不同的API。例如,如果要获取bbox的宽度和高度

陈旧::
宽度=Fig.bbox.x.Interval()高度=Fig.bbox.y.Interval())
新::
width=fig.bbox.width()height=fig.bbox.height()。

对象构造函数

您不再将bbox、dpi或转换传递给各个艺术家构造函数。创建线条和矩形的旧方法很繁琐,因为必须将许多属性传递给Line2d和Rectangle类,而这些类与对象的几何图形和属性没有直接关系。现在,当您调用axes.add_line或axes.add_patch时,默认值会添加到对象中,因此它们对用户是隐藏的。

如果要在这些对象上定义自定义转换,请调用o.set_transform(trans),其中trans是转换实例。

在以前的版本中,您需要在数据坐标中添加自定义行。

L=第2d行(dpi、bbox、x、y,
颜色=颜色,transx=transx,transy=transy,)

现在你只需要

L=line2d(x,y,color=color)

轴将为您设置转换(除非您已经设置了自己的,在这种情况下,它将保持不变)

变换

整个转换架构已经重写。以前X和Y转换存储在Xaxis和Yaxis实例中。这种方法的问题在于它只允许可分离变换(其中x和y变换不相互依赖)。但是像极性这样的情况下,他们会。现在,变换一起作用于x,y。有一个新的基类matplotlib.transforms.transformation和两个具体的实现matplotlib.transforms.separatebletransformation和matplotlib.transforms.affine。可分离转换由输入的边界框(这决定了输入的矩形坐标系,即X和Y视图限制)、显示的边界框以及可能的X和Y的非线性转换构成。最常用的两种转换,数据坐标->显示和轴坐标TES->显示有ax.transdata和ax.transaxs。请参见使用轴坐标的“Alignment_demo.py”。

此外,由于两个原因,现在的转换应该快得多

  • 它们完全是用扩展代码编写的

  • 因为它们一起操作x和y,所以它们可以在一个循环中完成整个转换。早些时候,我做了一件事:

    xt = sx*func(x) + tx
    yt = sy*func(y) + ty
    

    虽然这是在numerix中完成的,但它仍然涉及6个长度(x)的循环(x和y的乘法、加法和函数计算)。现在所有这些都是一次性完成的。

如果使用转换和边界框在数据坐标中获取光标位置,那么方法调用现在有点不同。请参阅更新的examples/coords_demo.py,其中演示了如何执行此操作。

同样,如果您使用艺术家边界框来使用图形用户界面在画布上选择项目,那么bbox方法也有所不同。您需要查看更新的示例/对象选择器.py。

有关使用新转换的许多示例,请参见Unit/Transforms_Unit.py。