如何使用matplotlib显示两个数字?


79

同时绘制两个图形时出现了一些麻烦,没有在一个图中显示。但是根据文档,我编写了代码,只有图1所示。我想也许我失去了一些重要的东西。有人可以帮我弄清楚吗?谢谢。(代码中使用的* tlist_first *是数据列表。)

plt.figure(1)
plt.hist(tlist_first, bins=2000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')
plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')

plt.axvline(x = 30, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 60, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend()
plt.xlim(0,120)
plt.ylim(0,1) 
plt.show()
plt.close() ### not working either with this line or without it

plt.figure(2)
plt.hist(tlist_first, bins=2000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')

plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')

plt.axvline(x = 240, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 1440, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend(loc= 4)
plt.xlim(0,2640)
plt.ylim(0,1)
plt.show()

Answers:


90

plt.show()除了在脚本末尾调用之外,还可以分别控制每个图形,分别执行以下操作:

f = plt.figure(1)
plt.hist........
............
f.show()

g = plt.figure(2)
plt.hist(........
................
g.show()

raw_input()

在这种情况下,您必须打电话raw_input保持数字有效。这样,您可以动态选择要显示的数字

注意:在Python 3中raw_input()被重命名为input()


1
不幸的是,对于python3.6和最新的matplotlib,调用多个fig.show()似乎什么也没显示。我仍然必须最后调用plt.show()。
kakyo

1
@kakyo -使用Python3.6.6与Matplotlib 2.2.2(这是在你的写作时的最新版本); 上面的解决方案对我有用。您的问题必须来自其他方面,例如使用的后端。跑步matplotlib.get_backend(),我得到'Qt5Agg'
n1k31t4

我还必须添加figure=g第二个plt.hist()
Michael Litvin

我需要其他套餐吗?NameError: name 'raw_input' is not defined
zheyuanWang

1
@zheyuanWang如果使用的是python 3,则必须使用input()。看到帖子中的最后一个音符
华金

59

plt.show()创建所有图后,您应该只在最后调用。


8
我觉得这很烦人,因为如果我打电话show()一次,就不能再打电话,如果我想再次显示该图,我必须重新绘制它吗?
奥尔科特

23

我有同样的问题。


做了:

f1 = plt.figure(1)

# code for figure 1

# don't write 'plt.show()' here


f2 = plt.figure(2)

# code for figure 2

plt.show()


在最后一个数字之后只写一次“ plt.show()”。为我工作。



它将在同一窗口中显示,而不是在2个单独的窗口中显示。虽然回答OP的问题。因此支持。
Mike de Klerk

但是,如果您想要一个单独的地块怎么办?它被绘制在同一图上
Nhoj_Gonk

6

另外,我建议在开始和最后一个情节中打开交互功能,然后将其关闭。所有内容都会显示出来,但是它们不会消失,因为您的程序会一直存在直到您关闭数字。

import matplotlib.pyplot as plt
from matplotlib import interactive

plt.figure(1)
... code to make figure (1)

interactive(True)
plt.show()

plt.figure(2)
... code to make figure (2)

plt.show()

plt.figure(3)
... code to make figure (3)

interactive(False)
plt.show()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.