用于数据验证的Python散点图在背景图像上

时间:2017-08-15 02:34:34

标签: python image matplotlib background scatter

我正在尝试在Python中用背景图像绘制数据以进行数据验证,即看看我从我自己的数据生成的曲线与我的截图保存为一张纸的距离是多少。 PNG。

我已使用extent关键字imshow尝试了此处的代码: Adding a background image to a plot with known corner coordinates这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import imread
import matplotlib.cbook as cbook

np.random.seed(0)
x = np.random.uniform(0.0,10.0,15)
y = np.random.uniform(0.0,1.25,15)

datafile = cbook.get_sample_data('C:\\Users\\andrew.hills\\Desktop\\Capture.png')
img = imread(datafile)
plt.scatter(x,y,zorder=1)
plt.imshow(img, zorder=0, extent=[0.0, 10.0, 0.00, 1.25])
plt.show()

我遇到的问题是图形看起来是扭曲的,我认为这是因为每个像素在轴上设置为1x1但我的数据范围在x方向为0.0-10.0,在y方向为0.00-1.25:

enter image description here

如何更改此图像以使图像不会失真?

2 个答案:

答案 0 :(得分:1)

问题确实是图像通过范围参数获得新的数据范围,并且图像的宽高比(默认情况下“相等”)因此会导致图像失真。

您需要做的是计算考虑新数据范围的新宽高比。

new_aspect = #pixels along y /

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(0)
x = np.random.uniform(0.0,10.0,15)
y = np.random.uniform(0.0,1.25,15)
plt.scatter(x,y,zorder=1)

img = plt.imread("house.png")

ext = [0.0, 10.0, 0.00, 1.25]
plt.imshow(img, zorder=0, extent=ext)

aspect=img.shape[0]/float(img.shape[1])*((ext[1]-ext[0])/(ext[3]-ext[2]))
plt.gca().set_aspect(aspect)

plt.show()

enter image description here

答案 1 :(得分:0)

我认为你所说的是你希望你的图像符合你添加它的轴的纵横比,而不是将这些轴调整为具有1:1的纵横比。如果是这种情况,请尝试在aspect='auto'来电中添加imshow

plt.imshow(img, zorder=0, extent=[0.0, 10.0, 0.00, 1.25], aspect='auto')