How to create a plot in matplotlib without using pyplot
我已经每天使用 matplotlib 五个月了,但我仍然觉得创建新图形令人困惑。
通常我会创建一个带有 2x2 子图的图形,例如,使用类似的东西:
1 2 3 4 5 6 7
| import matplotlib.pyplot as plt
import itertools as it
fig,axes = plt.subplots(2,2)
axit = (ax for ax in it.chain(*axes))
for each of four data series I want to plot:
ax = next(axit)
ax.plot(...) |
我现在的问题是:如何完全独立于 pyplot 运行,即,我如何创建一个图形,用图形填充它,进行样式更改,并且只告诉该图形在我想要的确切时刻出现出现。这是我遇到的问题:
1 2 3 4 5 6 7
| import matplotlib as mpl
gs = gridspec.GridSpec(2,2)
fig = mpl.figure.Figure()
ax1 = fig.add_subplot(gs[0])
ax1.plot([1,2,3])
ax2 = fig.add_subplot(gs[1])
ax2.plot([3,2,1]) |
在运行上述之后,唯一想到的就是使用:
但这不起作用。使带有图的图形出现缺少什么?另外,是
1
| fig = mpl.figure.Figure() |
我要做的就是在没有 pyplot 的情况下创建图形?
- 为什么不想使用 pyplot?
-
我正在使用 Tkinter 将 matplotlib 嵌入到 GUI 中。我在书中和网上看到了一些代码后,我已经启动并运行了它。他们在 GUI 中嵌入绘图的方式不使用 pyplot。现在我正在尝试添加一些新功能,例如使用带有 gridspec 的多个绘图而不是简单的绘图。
-
这是一个关于如何在 Tk 中嵌入图形的示例:matplotlib.org/examples/user_interfaces/embedding_in_tk.html
您可以手动将合适的后端附加到您的图形,然后显示它:
1 2 3
| from matplotlib.backends import backend_qt4agg # e.g.
backend_qt4agg.new_figure_manager_given_figure(1, fig)
fig.show() |
...但为什么不使用 pyplot?
- 我正在使用 Tkinter 将 matplotlib 嵌入到 GUI 中。在在一本书和网上看到了一些代码之后,我已经启动并运行了它。他们在 GUI 中嵌入绘图的方式不使用 pyplot。现在我正在尝试添加一些新功能,例如使用带有 gridspec 的多个绘图而不是简单的绘图。
-
但正如我所理解的,我从文档中阅读了以下内容:"matplotlib 可以针对不同的输出,这些功能中的每一个都称为后端""后端有两种类型:用户界面后端(用于 pygtk、wxpython 、tkinter、qt4 或 macosx;也称为"交互式后端")和用于制作图像文件的硬拷贝后端(PNG、SVG、PDF、PS;也称为"非交互式后端")。"
-
"为了让图形用户界面更加可定制,matplotlib 将渲染器(实际进行绘图的东西)的概念与画布(绘图所在的地方)分开。""用户界面的规范渲染器是 Agg"因此,据我了解,您使用的是后端 Qt4agg,即"Agg 渲染到 Qt4 画布"。 Tkinter 使用 Tkagg,即"Agg 渲染到 Tk 画布"。来自艺术家教程:
-
"matplotlib API 有三层。matplotlib.backend_bases.FigureCanvas 是绘制图形的区域,matplotlib.backend_bases.Renderer 是知道如何在 FigureCanvas 上绘制的对象,而 matplotlib.artist。艺术家是知道如何使用渲染器在画布上绘画的对象。"
-
所以只是看看我是否理解:当你不使用 pyplot 时,你必须手动将艺术家连接到后端(这是一个渲染器画布)。这就是您在该行中所做的: backend_qt4agg.new_figure_manager_given_figure(1, fig) 对吗?
-
这是我的理解:您需要附加一个与后端相关联的图形管理器,该后端知道如何显示您的情节。