Matplotlib 1.5中的新功能¶
Table of Contents
注解
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__
(dict
, pandas.DataFrame
, h5py
,…)访问 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
在两个或更多的财产循环。

颜色循环¶
新彩色地图¶
所有四个作为新默认值的颜色映射都可用作 'viridis'
(2.0中的新默认值) 'magma'
, 'plasma'
和 'inferno'
(Source code _, png , pdf )

风格¶
添加了几个新样式,包括Seaborn项目中的许多样式。此外,为了准备即将发布的2.0样式更改,添加了“经典”和“默认”样式。对于这个版本,“默认”和“经典”样式是相同的。通过现在在脚本中使用它们,您可以帮助确保在将来的matplotlib升级过程中平稳过渡,以便在准备好时升级到时髦的新默认值!::
import matplotlib.style
matplotlib.style.use('classic')
“默认”样式将为您提供matplotlib的最新打印样式:
matplotlib.style.use('default')
后端¶
新后端选择¶
环境变量 MPLBACKEND
现在可以用来设置matplotlib后端。
配置(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_active
和 get_active
方法(在访问 active
属性)正确更新和查询它们是否处于活动状态。
感动 ignore
, set_active
和 get_active
方法到基类 Widget
¶
将子类中的重复方法向上推到父类,以避免代码重复。
改进的矩形选择器和新的椭圆选择器小部件¶
添加一个 互动式 关键字,该关键字允许在绘制形状后使用可见句柄来操作形状。
为以下项添加键盘修饰符:
- 移动现有形状(默认键为“空格”)。
- 使形状变为方形(默认为“shift”)。
- 使初始点成为形状的中心(默认为“control”)。
- 方形和中心可以组合
允许艺术家在光标中显示像素数据¶
添加 get_cursor_data
和 format_cursor_data
方法将zdata添加到状态栏中的光标显示中。还为图像添加了一个实现。
新绘图功能¶
自动换行文字¶
在文本中添加关键字参数“wrap”,它在绘制时自动打断长文本行。适用于任何旋转文本、不同的对齐模式以及标签或标题文本。这是在 Figure
不是 Axes
边缘。
(Source code _, png , pdf )

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

轮廓角遮罩¶
主要是统一的线条样式 Line2D
, Patch
和 Collection
¶
线、面片和集合的线型处理已统一。现在它们都支持使用短符号(如“--”)以及全名(如“虚线”)定义线型。使用破折号模式的定义 ((0., [3., 3.])
)所有方法都支持使用 Line2D
, Patch
或 Collection
.
图例标记顺序¶
添加了将标签放在图例框中标记之前的功能, markerfirst
关键字
支持多集合和堆叠图的图例¶
增加了一个 legend_handler
对于 PolyCollection
以及A 标签 参数 stackplot()
.
添加步骤kwargs以填充¶
补充 step
克瓦格 Axes.fill_between
允许在使用“阶梯”绘制样式绘制的线条之间填充。价值观 step
与…相匹配 where
克沃格 Axes.step
. Kwargs名称的不对称性并不理想,但 Axes.fill_between
已经有了 where
克瓦格
这对于绘制预先分类的柱状图特别有用。

填充台阶¶
方格图¶
在轴函数中实现了作为新参数的方形图特征。当指定参数“square”时,将设置相等的缩放比例,并将限制设置为 xmax-xmin == ymax-ymin
.
(Source code _, png , pdf )

更新了FigImage以获取可选的调整大小参数¶
添加了使用 plt.figimage(X, resize=True)
. 这对于绘制不带轴或围绕图像的空白的简单二维数组很有用。
(Source code _, png , pdf )

更新的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.
在饼图中添加了中心和框架Kwargs¶
这些控件控制饼图的中心位置以及是否显示轴框架。
固定的三维填充轮廓图多边形渲染¶
某些情况下,生成带有多个孔的多边形的三维填充轮廓图会由于路径信息丢失而产生不正确的渲染。 PolyCollection
和 Poly3DCollection
. 函数 set_verts_and_codes()
添加以允许保留路径信息以便正确呈现。
密集的彩条被栅格化¶
矢量文件格式(PDF、PS、SVG)对于许多类型的打印元素都是有效的,但对于某些类型的打印元素,它们可能会产生过大的文件大小,甚至渲染工件,这取决于用于屏幕显示的渲染器。这对于显示大量阴影的颜色条来说是个问题,最常见的情况就是这样。现在,如果一个颜色条显示50种或更多颜色,它将在向量后端进行栅格化。
日期格式化程序strftime¶
DateFormatter
的 __call__()
方法将格式化 datetime.datetime
将格式字符串传递给格式化程序的构造函数的对象。此方法接受1900之前年份的日期时间,与 datetime.datetime.strftime()
.
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
通过 DrawingArea
和 TextArea
. 这个 TextArea
计算文本所需的空间,使文本始终在边界内,因此没有任何更改。
然而, DrawingArea
充当零个或多个的父级 Artist
有人利用它,并可能这样做超越界限。现在孩子 Artist
s可以被裁剪到 DrawingArea
.
现在,通过紧凑的布局考虑了场外交易箱¶
什么时候? tight_layout()
或 Figure.tight_layout
或 GridSpec.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
有两种基本方法 enable
和 disable
当它被切换时自动调用。
完整示例位于 刀具管理器
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参数,目前支持 none
和 html5
. 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
. 如果您的工具链有前缀,这一点很重要。这是一种简单的设置方式 CC
或 CXX
在建造之前。下面是一个例子。
导出pkg_config=x86_64-pc-linux-gnu-pkg-config