我试图知道如何使用'范围'在matplotlib中使我的背景图像看起来不错

时间:2016-08-23 08:13:15

标签: python matplotlib

无论我改变什么价值观,它总是扭曲它,或者它在左边太远。

以下是一个例子:

Plot with background image

barchart = pd.read_csv('barchart.csv')
df = pd.DataFrame(barchart)
var1 = df['col1'].head(7).tolist()
var2 = df['col2'].head(7).tolist()
sometitle = df['sometitle'][0]
var2 = [ float(x) for x in var2 ]

y_pos = np.arange(len(var1))
datafile = cbook.get_sample_data('/path/to/watch.jpg', asfileobj=False)
im = image.imread(datafile)

plt.imshow(im, zorder=0, extent=[0.5, 8.0, 1.0, 7.0])

barlist = plt.barh(y_pos, var2, align='center', alpha=0.5)
colors = ["red", "green", "blue", "orange", "pink", "cyan", "yellow"]
for a, b in zip(range(6), colors):
    barlist[a].set_color(b)
plt.yticks(y_pos, var1)

plt.xlabel('a label', color="green", fontsize=9)
plt.title(sometitle + " " + str(now)) 
plt.show()  

1 个答案:

答案 0 :(得分:0)

从文档中

  

范围:标量(左,右,下,上),可选,默认:无

     

数据坐标中左下角和右上角的位置。如果为None,则定位图像使得像素中心落在从零开始(行,列)的索引上。

因此,如果您想将图片放在给定的xy并且size全部放在数据坐标中,请获取im.shape的比率并将其用于规模。例如,

import matplotlib.pyplot as plt
import numpy as np

val = 3+10*np.random.random(7)  
pos = np.arange(7)+.5

fig,ax = plt.subplots(1,1)

colors = ["red", "green", "blue", "orange", "pink", "cyan", "yellow"]
barlist = ax.barh(pos, val, align='center',alpha=0.5)
for a, b in zip(range(6), colors):
    barlist[a].set_color(b)

im = plt.imread('/path/to/watch.jpg')
x = 4.; y = 0.; size = 7.; xyratio = im.shape[1]/im.shape[0]
ax.imshow(im, zorder=0, extent=[x, x+size , y, y+size*xyratio])

ax.set_xlim([0.,np.max(val)+1.])
ax.set_ylim([0.,np.max(pos)+1.])

plt.show()

看起来像,

enter image description here

请注意,图像周围还存在空白问题,这会导致它远离范围。

您也可以执行设置aspect="equal"之类的操作,但必须删除extents