Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python matplotlib中的多进程绘图_Python_Pandas_Matplotlib_Multiprocessing_Python Multiprocessing - Fatal编程技术网

Python matplotlib中的多进程绘图

Python matplotlib中的多进程绘图,python,pandas,matplotlib,multiprocessing,python-multiprocessing,Python,Pandas,Matplotlib,Multiprocessing,Python Multiprocessing,如何通过函数并行使用matplotlib可视化数据?也就是说,我想在并行过程中创建图形,然后在主过程中显示它们 以下是一个例子: #输入数据 将熊猫作为pd导入,matplotlib.pyplot作为plt导入 df=pd.DataFrame(数据={'i':['A','A','B','B'], “x”:[1,2,3,4], ‘y’:[1,2,3,4.]}) df.set_索引('i',in place=True) df.sort_索引(inplace=True) #从数据创建地物的函数 def

如何通过函数并行使用matplotlib可视化数据?也就是说,我想在并行过程中创建图形,然后在主过程中显示它们

以下是一个例子:

#输入数据
将熊猫作为pd导入,matplotlib.pyplot作为plt导入
df=pd.DataFrame(数据={'i':['A','A','B','B'],
“x”:[1,2,3,4],
‘y’:[1,2,3,4.]})
df.set_索引('i',in place=True)
df.sort_索引(inplace=True)
#从数据创建地物的函数
def牵引(df,i):
图=plt.图(i)
ax=图gca()
df=df.loc[i,:]
最大散射(df['x'],df['y'])
返回图
def提取包装器(x):返回提取(*x)
#并行生成图形
来自多处理导入池
池大小=2
池(池大小)为p时:
args=[(df,'A'),(df,'B')]
图=p.map(DrawWrapper,args)
#尝试将结果可视化
图=plt.图('A')
plt.show()
#FIXME:get“RuntimeError:主线程不在主循环中”
如何从辅助进程传输地物对象,以便能够在主进程中显示地物

谢谢你的帮助

[编辑: 有人建议,这个问题可以通过以下方式解决:

以下是相应的代码:

#输入数据
将熊猫作为pd导入,matplotlib.pyplot作为plt导入
df=pd.DataFrame(数据={'i':['A','A','B','B'],
“x”:[1,2,3,4],
‘y’:[1,2,3,4.]})
df.set_索引('i',in place=True)
df.sort_索引(inplace=True)
#从数据创建地物的函数
def牵引(df,i):
图=plt.图(i)
ax=图gca()
df=df.loc[i,:]
最大散射(df['x'],df['y'])
plt.show()
#并行生成图形
从多处理导入进程
args=[(df,'A'),(df,'B')]
对于args中的a:
p=过程(目标=绘图,参数=a)
p、 开始()
#修正我:结果是一样的(可能更糟,因为我没有
#获取我可以尝试显示的任何结果):
# ...
#运行时错误:主线程不在主循环中
#运行时错误:主线程不在主循环中
我遗漏了什么吗?

的答案在
中隐藏了代码的开头,如果
子句。因此,以下内容应该在这里起作用

import pandas as pd
import matplotlib.pyplot as plt

import multiprocessing
#multiprocessing.freeze_support() # <- may be required on windows

df = pd.DataFrame(data={'i':['A','A','B','B'],
                       'x':[1.,2.,3.,4.],
                       'y':[1.,2.,3.,4.]})
df.set_index('i', inplace=True)
df.sort_index(inplace=True)

# function which creates a figure from the data
def Draw(df, i):
    fig, ax  = plt.subplots()
    df = df.loc[i,:]
    ax.scatter(df['x'], df['y'])
    plt.show()

# creating figures in parallel
args = [(df,'A'), (df,'B')]

def multiP():
    for a in args:
        p = multiprocessing.Process(target=Draw, args=a)
        p.start()

if __name__ == "__main__":         
    multiP()
将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
导入多处理

#multiprocessing.freeze_support()#可能与Thank you重复,但它似乎无法解决我的问题,除非我遗漏了一些重要的细节。1)问题“semi”中的第二个代码示例在新的python会话中起作用,如果在它之前执行了第一个代码示例,则不起作用,2)由“semi works”执行,我的意思是,在主过程中,不可能获得指向结果图形的指针来对其进行更改:似乎图形对象不会被传输。我需要能够进一步处理生成的图形。如何从主进程获取指向图形的指针以进一步处理它们?如果我使用原始的“绘制”功能,然后执行
fig=plt.figure('A')
,我会得到一些图形对象。但对此类对象的更改不会导致对绘制图形的更改。