我正在尝试使用(301,5)
绘制形状为imshow
的数组。
plt.imshow(M*100, norm=norm, cmap=cmap, origin='lower', aspect="auto",
extent=[x.min(), x.max(), center[0]+dy/2, center[1]-dy/2],
interpolation='nearest')
一切都很好,但是我必须对x轴数据进行转换:x**-1
(具体来说,我将波长转换为波数)。轴将按原样进行转换,但由于反转操作引起的拉伸,因此imshow
绘制的数据不会重塑。
这里是imshow输出:
这是使用pcolormesh
的正确输出,但是pcolormesh
省略了一行...
plt.pcolormesh(x**-1 *1e4, y, M*100, vmax=9, cmap=cmap)
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9wUGJKWi5wbmcifQ==” alt =“ pcolormesh output”>
y轴的范围选项是将标签放置在中心。
解决这个问题的任何想法?
PS:我不使用pcolormesh
,它可以正确转换轴,但只会绘制(300,4)
的数组。
pcolormesh
不会省略线,它会为网格的所有顶点分配值,然后对它们进行插值。
Note that the dimensions of X and Y should be one greater than those of C. Alternatively, X, Y and C may have equal dimensions, in which case the last row and column of C will be ignored.
一种可能的方法是调用pcolormesh
5次,每行一次。请注意,在这种情况下,M
的最后一列也会被删除,除非您人为地向x
添加了一个条目。
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(1/1200, 1/3200, 301)
y = np.arange(0.5, 5.5, 1)
X, Y = np.meshgrid(x, y)
M = np.sin(X * 40000 + Y / 2)
# plt.imshow(M, aspect='auto', interpolation='nearest')
for i in range(5):
plt.pcolormesh(1/x, [i+0.5, i+1.5], [M[i,:]])
plt.show()
PS:正如您所指出的,显然,它也可以仅添加一个额外的y值。该y值以及x的最后一个将被忽略。
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(1/1200, 1/3200, 301)
y = np.arange(0.5, 6.5, 1)
X, Y = np.meshgrid(x, y)
M = np.sin(X * 40000 + Y / 2)
plt.pcolormesh(1/x, y, M)