如何在循环中绘制时间序列的片段,并且只在用户输入后绘制下一次迭代



我试图绘制一个时间序列的多个片段,比如说5个片段。我希望在给定的输入(按键(后,每个片段都被单独绘制并一个接一个地绘制

例如,1(绘制第一个片段,2(等待输入并且仅在我的输入之后3(绘制下一个片段。在绘制下一段之前,我需要python等待输入(按键(。

我已经设法使它几乎工作,但在jupyter笔记本上,在我为所有绘图(即5个输入(输入一些东西后,所有图形都会同时显示

segments = segments.iloc[0:5]   # reduced number for testing
list = []
for i in segments.itertuples(): # loop over df

f, ax = plt.subplots()
ax.plot(time, yy)           # plot timeseries
plt.xlim([segments.start_time, segments.end_time]) # only show between limits
plt.show()

# get user input
a = input()
list.append(a) # add input to the list

我一直在摇头,但一直没能解决这个问题。关于如何解决这个问题有什么建议吗?

我有一个改编了我以前使用过的例子的例子,但请注意,我在这里没有使用子图!:

import matplotlib.pyplot as plt
inp_ = []
for i in range(3):
labels = ['part_1','part_2','part_3']
pie_portions = [5,6,7]
plt.pie(pie_portions,labels=labels,autopct = '%1.1f%%')
plt.title(f'figure_no : {i+1}')
plt.show()
# get user input
a = input()
inp_.append(a) # add input to the list

如果您使用子图形,那么您会看到它在最后等待显示所有图形的地方,因为图形只有在指定最后一个子图形后才完整且可显示。否则它会被阻塞。最简单的解决方案是放弃使用子块,就像我上面发布的代码块一样。

如果你绝对需要它来处理子图形,你实际上可以在之后更新图形,就像这样;

#Using subplots based on https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_demo2.html
import matplotlib.pyplot as plt

import numpy as np
def update_subplot():
'''
based on https://stackoverflow.com/a/36279629/8508004
'''
global fig, axs
ax_list = axs.ravel()
# ax_list[0] refers to the first subplot
ax_list[1].imshow(np.random.randn(100, 100))
#plt.draw()

# Some data
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
fracs = [15, 30, 45, 10]
# Make figure and axes
fig, axs = plt.subplots(1, 3)
# A standard pie plot
axs[0].pie(fracs, labels=labels, autopct='%1.1f%%', shadow=True)
axs[1].axis('off') # based on https://stackoverflow.com/a/10035974/8508004
axs[2].axis('off')
plt.show()
import time
time.sleep(2)
update_subplot()
fig

然而,如果你运行它,你会看到你得到连续的视图,先有一个图,然后有两个图,第一个图(只有两个子图中的一个子图(留在笔记本输出中,所以这不太理想。

在发布问题时,最好提供一个最小限度的可重复示例。这样你就可以得到一些接近于你的案例的东西。


此外,使用内置类型作为变量名称是个坏主意。(list = [](它可能会导致您以后没有预料到的错误。想象一下,您想在稍后的代码示例中将一个集合类型转换回列表。

比较:

list = []
my_set= {1,2,3}
a = list(my_set)

my_list = []
my_set= {1,2,3}
a = list(my_set)

第一个将给出CCD_ 2。

相关内容

  • 没有找到相关文章