matplotlib 如何在julia中使用多处理来创建子图?

mznpcxlj  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(120)

以前我用每一个过程来创建一个图。因为有太多的图,最好把这些图安排在子图中,以便更好地进行比较。
我第一次尝试这个

using Distributed
@everywhere using PyPlot

fig, ax = plt.subplots(1, 4)
pmap(i-> begin
ax[i].scatter([i, 2], [3, 4])
end, 1:4)

fig.savefig("test.png", transparent=false)

它只是生成空的子图。我后来明白了,这是因为ax是为每个进程复制的,并且不会在进程之间共享。
然后我尝试SharedArrays共享ax

using SharedArrays
convert(SharedArray, ax)

并得到

ArgumentError: type of SharedArray elements must be bits types, got PyCall.PyObject

最终的解决方案是将绘图移出每个过程并收集数据。
然而,我仍然很好奇,是否有任何方法可以在每个过程中创建数字(或子情节),并最终收集它们?

wecizke3

wecizke31#

通过Plots.jl使用PyPlot。Plots.jl允许从以前生成的图构建布局。

using Distributed
addprocs(4)
@everywhere using Plots
@everywhere pyplot()

pp = pmap(i -> plot(rand(10).+myid()), 1:4)
plot(pp...)

(note这个例子中的每个图都有对应于工人ID的Y刻度)

相关问题