【问题标题】:How to retrieve the raw figure data from matplotlib?如何从 matplotlib 中检索原始图形数据?
【发布时间】:2023-02-07 02:42:35
【问题描述】:

我正在使用 matplotlib 生成我可以训练的矩阵。我需要获取原始图形数据。 保存和读取 .png 工作正常,但我的代码运行时间延长了 10 倍。另一个 stack overflow 问了类似的问题,解决方案是抓取画布,但是相关的逻辑产生了一个 numpy 错误。这是我的mwe。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.transforms import IdentityTransform


px = 1/plt.rcParams['figure.dpi']  # pixel in inches
fig, ax = plt.subplots(figsize=(384*px, 128*px))
i = 756
plt.text(70, 95, "value {:04d}".format(i), color="black", fontsize=30, transform=IdentityTransform())
plt.axis('off')
plt.savefig("xrtv.png")     # I dont want to do this ...
rtv = plt.imread("xrtv.png")  # or this, but I want access to what imread returns.

gray = lambda rgb: np.dot(rgb[..., :3], [0.299, 0.587, 0.114])
gray = gray(rtv)

【问题讨论】:

  • 这个answer提供了一个使用fig.canvas.tostring_rgb()的解决方案。此外,您可以使用 plt.ioff(),因此在调用 plt.show() 之前不会绘制任何内容,这可以加快您的代码速度。

标签: python matplotlib


【解决方案1】:

禁用绘图是一个很好的提示。也可以使用fig.canvas.renderer.buffer_rgba访问内存数组避开字符串,例如:

import numpy as np
import matplotlib.pyplot as plt

plt.ioff()

fig,ax = plt.subplots()
ax.plot(np.sin(np.arange(1000)))
fig.canvas.draw()
img_matrix = np.array(fig.canvas.renderer.buffer_rgba())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2021-07-06
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多