与背景(图像)图表叠加绘图

问题描述 投票:0回答:1

我正在尝试使用现有图表作为我想在图表顶部绘制的新数据的背景。 当使用包含轴内所有信息的图表并使用

extent
plt.imshow
参数时,我已经能够做到这一点,因为这样我只需缩放图像即可。

我想缩放和移动背景图。在实际用例中,重新绘制背景不是一个选项。

这是我迄今为止尝试过的:

  1. 生成背景图(可重现的示例)
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([0, 5, 10], [8, 5, 12])
ax.set_xlim(0, 20)
ax.set_ylim(0, 15)
ax.set_title('Background graph')
fig.show()
fig.savefig('bg_graph.png')

background_graph

  1. 使用
    plt.imshow()
    添加背景图,然后叠加我的数据。
bg_img = plt.imread('bg_graph.png')
fig, ax = plt.subplots()
ax.imshow(bg_img, extent=[0,50,0,50])
ax.scatter([4.9, 5.2], [7, 4.9])
fig.show()
fig.savefig('result.png')

superimposed_graph

我已经使用 Excel 制作了预期结果的模型: expected_result

是否有一种方法可以将新图形拉伸到现有轴(来自图像)以绘制新数据?我假设图像中轴的坐标是已知的或者可以通过试错来猜测。重新表述这一点的一种方法是说我想将新的绘图延伸到图像,而不是相反。

python matplotlib charts
1个回答
0
投票

我能够产生与您所描述的类似的结果,希望这就是您正在寻找的:

import matplotlib.pyplot as plt
import matplotlib.image as mpimg

fig, ax = plt.subplots()
ax.plot([0, 5, 10], [8, 5, 12])
ax.set_xlim(0, 20)
ax.set_ylim(0, 15)
ax.axis('off')
fig.savefig('bg_graph.png', bbox_inches='tight', pad_inches=0, transparent=True)
plt.close(fig)

bg_img = mpimg.imread('bg_graph.png')

fig, ax = plt.subplots()
ax.imshow(bg_img, extent=[0, 20, 0, 15], aspect='auto')
ax.scatter([4.9, 5.2], [7, 4.9], color='red', label="New Data Points")
ax.set_xlim(0, 20)
ax.set_ylim(0, 15)
ax.set_title('Superimposed Graph')
ax.legend()

plt.show()
fig.savefig('superimposed_result.png')
© www.soinside.com 2019 - 2024. All rights reserved.