关于python:如何在不使用pyplot的情况下在matplotlib中创建绘图 | 珊瑚贝

How to create a plot in matplotlib without using pyplot


我已经每天使用 matplotlib 五个月了,但我仍然觉得创建新图形令人困惑。

通常我会创建一个带有 2×2 子图的图形,例如,使用类似的东西:

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
plt.draw()

但这不起作用。使带有图的图形出现缺少什么?另外,是

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) 对吗?
  • 这是我的理解:您需要附加一个与后端相关联的图形管理器,该后端知道如何显示您的情节。


来源:https://www.codenong.com/30809316/

微信公众号
手机浏览(小程序)
0
分享到:
没有账号? 忘记密码?