Python plt.imshow无法正常工作

Python plt.imshow无法正常工作,python,numpy,matplotlib,Python,Numpy,Matplotlib,所以我用python编写了这段代码 import numpy as np import matplotlib.pyplot as plt M = np.zeros((490,1900)) fig, ax = plt.subplots() plt.imshow(M, aspect='auto') ax.set_ylabel('f2') ax.set_xlabel('f1') plt.xlim((0, 490)) plt.ylim((0, 1900)) x_range = np.arange(0,

所以我用python编写了这段代码

import numpy as np
import matplotlib.pyplot as plt
M = np.zeros((490,1900))
fig, ax = plt.subplots()
plt.imshow(M, aspect='auto')
ax.set_ylabel('f2')
ax.set_xlabel('f1')
plt.xlim((0, 490))
plt.ylim((0, 1900))
x_range = np.arange(0, 490, step=50)
x_strings = [str(x+190) for x in x_range]
plt.xticks(x_range, x_strings)
y_range = np.arange(0, 1900, step=200)
y_strings = [str(y+1710) for y in y_range]
plt.yticks(y_range, y_strings)
plt.colorbar()
plt.ioff()
plt.show()
当我编译它的时候,应该用我创建的零网格m覆盖整个区域,但是它覆盖了它的一部分,如图所示


我做错了什么?

我想你只是在创建矩阵时把自己弄糊涂了

您正在创建一个包含490行和1900列的矩阵,而您的目标可能是创建一个包含1900行和490列的矩阵

只需更改定义矩阵M的顺序即可解决问题:

这将产生:


当然,也可以通过反转xlim和ylim来更改打印限制

你有行和列翻转。490行和1900列。所以xlims应该是0到1900,y lims应该是0到490
import numpy as np
import matplotlib.pyplot as plt
M = np.zeros((1900, 490)) # change is here
fig, ax = plt.subplots()
plt.imshow(M, aspect='auto')
ax.set_ylabel('f2')
ax.set_xlabel('f1')
plt.xlim((0, 490))
plt.ylim((0, 1900))
x_range = np.arange(0, 490, step=50)
x_strings = [str(x+190) for x in x_range]
plt.xticks(x_range, x_strings)
y_range = np.arange(0, 1900, step=200)
y_strings = [str(y+1710) for y in y_range]
plt.yticks(y_range, y_strings)
plt.colorbar()
plt.ioff()
plt.show()