【问题标题】:How to create a plot in matplotlib without using pyplot如何在不使用 pyplot 的情况下在 matplotlib 中创建绘图
【发布时间】:2015-08-28 19:58:39
【问题描述】:

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

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

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 运行,即,我如何创建一个图形,用绘图填充它,进行样式更改,并且只告诉该图形在我想要的确切时刻出现出现。这是我遇到的问题:

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])

运行上述之后,唯一想到的就是使用:

plt.draw()

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

fig = mpl.figure.Figure()

在没有 pyplot 的情况下创建图形所需要做的一切?

【问题讨论】:

  • 你为什么不想使用pyplot?
  • 我正在使用 Tkinter 将 matplotlib 嵌入到 GUI 中。在在一本书和网上看到了一些代码之后,我已经启动并运行了它。他们在 GUI 中嵌入绘图的方式不使用 pyplot。现在我正在尝试添加一些新功能,例如使用带有 gridspec 的多个绘图而不是简单的绘图。
  • 这是一个如何在 Tk 中嵌入图形的示例:matplotlib.org/examples/user_interfaces/embedding_in_tk.html

标签: python matplotlib


【解决方案1】:

您可以手动将合适的backend 附加到您的图形上,然后显示:

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.Artist 是知道如何使用渲染器在画布上绘画的对象。”
  • 所以只是看看我是否理解:当你不使用pyplot时,你必须手动将艺术家连接到后端(这是一个渲染器+画布)。这就是您在该行中所做的: backend_qt4agg.new_figure_manager_given_figure(1, fig) 对吗?
猜你喜欢
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 2021-07-21
  • 2015-12-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多