首页 > 解决方案 > Matplotlib 添加背景图像而不损坏数据

问题描述

我用 matplotlib 创建了一个带有数据的图表,我想添加一个背景图像,但数据会根据图像数据而变化。我想要这个在背景上有一个图像,像这样: 我想要什么

因此,此代码创建的图形和图形:

import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

x = [datetime.datetime(2020, 7, 17, 0, 0) + datetime.timedelta(hours=i) for i in range(24)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
ax = plt.subplot()
ax.plot(x,y, lw=4)
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)
plt.gca().set_axisbelow(True)
plt.gca().grid(color='gray', linestyle='dashed')
plt.savefig("chart.png", transparent=True, dpi=80)

但是当我尝试使用此代码添加图像时:

import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

x = [datetime.datetime(2020, 7, 17, 0, 0) + datetime.timedelta(hours=i) for i in range(24)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
ax = plt.subplot()
imageFile = cbook.get_sample_data('/root/image.png')
image = plt.imread(imageFile)
ax.imshow(image)
ax.plot(x,y, lw=4)
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)
plt.gca().set_axisbelow(True)
plt.gca().grid(color='gray', linestyle='dashed')
plt.savefig("chart.png", transparent=True, dpi=80)

这给了我这个: 错误的图形

标签: pythonmatplotlib

解决方案


具有正确范围值的样本:

import datetime
import random
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

ax = plt.subplot()
x = [datetime.datetime(2020, 7, 17, 0, 0) + datetime.timedelta(hours=i) for i in range(24)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]
ax.plot(x, y, lw=4)

img = plt.imread('img.png')
x0,x1 = ax.get_xlim()
y0,y1 = ax.get_ylim()
ax.imshow(img, extent=[x0, x1, y0, y1], aspect='auto')

myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)
plt.gca().set_axisbelow(True)
plt.gca().grid(color='gray', linestyle='dashed')

plt.savefig("chart.png", transparent=True, dpi=80)

在此处输入图像描述


推荐阅读