我尝试打开多个图表,但遇到了一些问题。当我试图使用线程创建绘图时,Python 会先打开一些窗口,然后关闭除第一个之外的所有窗口。
在另一个问题中,推荐我使用 multiprocessing,我已经尝试过了。代码没有错误,只是没有显示任何图表。
在着手处理主要项目之前,我想先尝试让一些非常简单的东西起作用。
# Import the necessary packages and modules
import matplotlib.pyplot as plt
import numpy as np
#from threading import Thread
import multiprocessing
def plot(datax, datay, name):
# Prepare the data
x = datax
y = datay**2
# Plot the data
plt.scatter(x, y, label=name)
# Add a legend
plt.legend()
# Show the plot
plt.show()
#plot(3,3,)
'''
for i in range(10):
t = Thread(target=plot, args=(i,i+1,i,))
t.start()
'''
for i in range(2):
p = multiprocessing.Process(target=plot, args=(i, i, i))
p.start()
更新: 由于某些原因,多进程再次停止工作。我尝试创建一个名为multiP()的函数来打开这些进程,但是当我添加input('value: ')时它没有起作用。因为我无法弄清如何向特定线程发送数据,所以我将像这样保存数据:dat = [[x,y0,y1,...yn],[x,y0,y1,...yn],...],每个绘图进程都会检查是否有东西被添加到dat中。
import matplotlib.pyplot as plt
import numpy as np
import multiprocessing
#multiprocessing.freeze_support() # <- may be required on windows
def plot(datax, datay, name):
x = datax
y = datay**2
plt.scatter(x, y, label=name)
plt.legend()
plt.show()
def multiP():
if __name__ == "__main__":
for i in range(2):
p = multiprocessing.Process(target=plot, args=(i, i, i))
p.start()
if True:
#input('Vlaue: ') # while commented plots are shown
multiP()