gpt4 book ai didi

python-3.x - 如何连接两个 matplotlib 图形

转载 作者:行者123 更新时间:2023-12-02 18:47:30 26 4
gpt4 key购买 nike

我有一个脚本,可以从数据生成 matplotlib 图形。这些图按如下方式保存到磁盘:

fig, ax = plt.subplots()
# 创建情节
# ...
pickle.dump(ax, 打开(of, 'wb'))

在另一个脚本中,我想加入其中的某些情节。我可以使用以下方法读回数据:

figures = [pickle.load(file) for file in files]

(FWIW,我读回的数字的类型为 AxesSubplot。)

到目前为止一切顺利。现在我想使用可用绘图的最大或最小比例将两个(或更多)图形的数据放在一起。由于我缺乏经验,我完全不知道如何实现这一目标。我确实发现了有关加入绘图的问题,并且共识是首先在一个图中绘图。就我而言,这将相当困难,因为单个数据集的绘图逻辑已经很复杂。 (还有其他原因为什么每个数据集应该在第一步中单独绘制,然后才可以与其他数据集连接)。

我想要加入的图以相同的方式表示它们的数据 - 即所有图都是线图或直方图(不太确定如何有意义地加入这些图)或 QQPlots(请参阅 statsmodels.api)。它们的数据大小可能相同,也可能不同。

如何连接不同图形中的图?

最佳答案

我认为您会发现将数据保存到文件中更容易,以后您可以从中生成新的绘图。您甚至可以使用 np.savez不仅将数据,而且还将绘图方法及其参数保存在一个文件中。稍后您可以这样做load这些文件在新图中生成“连接”图:

import matplotlib.pyplot as plt
import numpy as np

def join(ax, files):
data = [np.load(filename) for filename in files]
for datum in data:
method = getattr(ax, datum['method'].item())
args = tuple(datum['args'])
kwargs = datum['kwargs'].item()
method(*args, **kwargs)

x = np.linspace(-3, 3, 100)
y = np.exp(-x**2/2)/np.sqrt(2*np.pi)
a = np.random.normal(size=10000)

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
np.savez('/tmp/a.npz', method='plot', args=(x, y), kwargs=dict())

fig, ax = plt.subplots()
ax.hist(a, bins=100, density=True)
plt.show()
np.savez('/tmp/b.npz', method='hist', args=(a,),
kwargs=dict(bins=100, density=True))

fig, ax = plt.subplots()
join(ax, ['/tmp/a.npz', '/tmp/b.npz'])
plt.show()

enter image description here

<小时/>

上面我使用了np.saveznp.load而不是pickle来保存和恢复数据。或者,您可以pickle 包含数据、方法及其参数的字典、元组或列表。然而,由于数据主要是数字,使用np.savezmore efficient and less of a security risk than pickle .

关于python-3.x - 如何连接两个 matplotlib 图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48912527/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com