关于matplotlib的.show()方法

3

我正在使用matplotlib生成一些图形,但我不知道展示图像的这两种方式有什么区别。我已经阅读了一些相关文档,但还无法理解。

第一种方式:

import matplotlib.pyplot as plt

plt.figure()
plt.plot(x, y)
plt.show()

第二种方式:

import matplotlib.pyplot as plt

graph = plt.figure()
plt.plot(x, y)
graph.show()

我认为这两种方法并没有做相同的事情,但是对我来说不太清楚。

有人能逐步解释一下这两种方法吗?

3个回答

1
简单来说,plt.show()会启动一个事件循环,并为pyplot状态下活动的每个图形创建一个图形表示。
相比之下,fig.show()(其中fig是一个图实例)只会显示此图。由于它也不会被阻塞,因此仅在交互式会话中有用;否则,由于脚本退出,图形将直接关闭。
通常情况下,您会更喜欢使用plt.show()。这并不妨碍您使用面向对象的接口。因此,创建和显示图的推荐方法是:
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

对于两个窗口,您只需重复绘图即可。
import matplotlib.pyplot as plt

fig1, ax1 = plt.subplots()
ax1.plot(x1, y1)

fig2, ax2 = plt.subplots()
ax2.plot(x2, y2)
plt.show()

假设我有两个(x,y)数据集,例如(x1,y1)和(x2,y2),我想在一个图表中表示它们的每一个((x1,y1)在图表1中,(x2,y2)在图表2中)。 - Zhisi
你想要弹出两个窗口,还是在同一个窗口内显示两个图形? - ImportanceOfBeingErnest
根据情况而定。但是假设我现在想要两个弹出窗口。 - Zhisi
好的,我更新了答案。就像之前说的一样,您只需要调用 plt.show() 一次。 - ImportanceOfBeingErnest
这里已经有足够多的关于向图形添加子图的问题了,而且它似乎与这个问题没有什么关系。 - ImportanceOfBeingErnest
显示剩余5条评论

0

Matplotlib有两种API实现方式。一种是基于对象的(graph.show()),另一种是过程式的(plt.show()),看起来很像Matlab绘图API。

过程式API适用于当前图形和/或坐标轴集合。您始终可以使用plt.gcf()获取当前图形和plt.gca()获取当前坐标轴。

某些情况下会存在一些语法上的细微差异。例如,如果要设置x轴限制:

plt.xlim([0, 10])

或者

ax = plt.gca()
ax.set_xlim([0, 10])

但是第一次的当前数字是多少? - Zhisi
如果我使用plt.show()一次,且x轴设置为[0,10],那么下一个图形的间隔也会相同吗? - Zhisi
当前图形是您创建的最后一个。如果您创建了新的图形,则需要重新设置轴限制。 - Brad Campbell

0

plt.figure 返回一个对象,可以通过 graph = plt.figure() 为其分配一个值来赋给 graph。这是在特定情况下更改这个对象(即图)的特征时使用的,现在该对象可以通过其实例 graph 引用(基于对象的绘图)。

如果您想要访问图的轴、标签、子图等,就要使用它。

请参见 https://python4mpia.github.io/plotting/advanced.html 以了解基于对象的绘图。

要操作绘图对象,您需要获得对它的引用(句柄),这可以通过 graph = plt.figure() 来完成(参见 面向对象编程)。


那么,如果我选择第一种方式,我就无法更改图形的任何特征。例如线条的颜色。这是正确的吗? - Zhisi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接