python - 具有多处理 * 有时 * 的 matplotlib 会更改图形格式
问题描述
我正在使用 matplotlib 制作许多数字并保存它们。我有 5 个左右的函数可以对数据执行简单或不执行计算、绘制数据,然后格式化图形以适应特定形式(标题、轴、纸张大小)。
这 5 个左右的绘图函数在计算之间被另一个函数一次调用一个。(一些计算,plotting_function_1,一些更多的计算,plotting_function_2,...)。
我在一个新进程中启动每个绘图函数,plotProcess1 = multiprocessing.Process(target=plot_data1, args=(data, save_directory); myProcess.start()
以便在绘图函数运行时继续计算。
当我在程序完成后检查数字时,许多数字的标题和纸张大小都有非常奇怪的格式错误。奇怪的部分是数据总是按应有的方式绘制(散点数据可能看起来有些丢失,但这只是数据集的一部分)。看看好数字与坏数字,看看我在说什么(左上角是预期输出,其他是问题)。
这只是在我开始使用多处理在后台制作绘图时才开始的。最奇怪的是它并不总是这样做,而且似乎是随机的。关于它为什么会这样做以及如何解决它的任何想法?由于时间原因,我真的很想在制作绘图时保持计算运行。对于某些数据集,每个绘图功能将制作数百个绘图,整个程序可能需要 10 小时才能完成。
编辑:我的数据集是非常大的空间数据集,因此我的每个绘图函数都会创建并保存多个绘图(大约 20 个,但可能会更少或更多,具体取决于数据集的大小)。我已经弄清楚问题何时发生,但仍然不知道为什么。当两个绘图函数同时运行时会发生奇怪的行为。
发生奇怪行为的典型时间线是:(plotting_function_1 已经开始 --> 一些小计算发生 --> plotting_function_2 开始 --> plotting_function_1 完成 --> Plotting_function_2 完成)
这对我来说仍然没有意义,因为每个绘图功能都在单独的进程中运行,不会更改任何数据,并保存为唯一的文件名。
编辑 2:这是一段将创建格式奇怪的图形的代码片段。
# Plot the raw data
if plot_TF is True:
photon_data_copy = photon_data.copy()
plot_segments_copy = plot_segments.copy()
if isParallel is True:
rawPlotProcess = multiprocessing.Process(target=plot_raw_data, args=(photon_data_copy, plot_segments_copy, run_name, plotdir))
rawPlotProcess.start()
else:
plot_raw_data(photon_data_copy, plot_segments_copy, run_name, plotdir)
# Calculate signal slab and noise slab
start = time.time()
signal_mask, noise_mask = assign_slabs_by_histogram_max_bin(photon_data, pixel_dimensions, slab_thickness)
logger.info('Time elapsed assigning slabs: {}'.format(time.time() - start))
photon_signal = photon_data[signal_mask, :]
photon_noise = photon_data[noise_mask, :]
# Plot the Signal and Noise slabs
if plot_TF is True:
photon_signal_copy = photon_signal.copy()
photon_noise_copy = photon_noise.copy()
if isParallel is True:
slabPlotProcess = multiprocessing.Process(target=plot_slabs, args=(photon_signal_copy, photon_noise_copy, plot_segments_copy, run_name, plotdir))
slabPlotProcess.start()
else:
plot_slabs(photon_signal_copy, photon_noise_copy, plot_segments_copy, run_name, plotdir)
解决方案
推荐阅读
- css - Bootsrap.css 未加载到使用 PuppeteerSharp 生成的 pdf 中
- html - 为什么按钮边框没有显示我设置的颜色?
- excel - 使用模块级私有变量和子变量而不是使用 VBA for Excel 中的函数传递变量是否会影响性能?
- input - 如何在 Mac OS 中的不同进程或应用程序之间同步鼠标和键盘操作?
- java - 检查编辑框是否为空
- robotframework - 机器人框架 Telnet 库不打开终端
- r - 在 R 中按组用 NA 填充缺失的日期 - NA 也位于日期范围的末尾
- sql - SQL 脚本表,但保持表与数据的顺序
- math - 为什么项目数据这么大?
- php - 您无法搜索关联字段,因为它是关联的反面。查找方法仅适用于拥有方关联