更改matplotlib imshow()graphics轴上的值

说我有一些input数据:

data = np.random.normal(loc=100,scale=10,size=(500,1,32)) hist = np.ones((32,20)) # initialise hist for z in range(32): hist[z],edges = np.histogram(data[:,0,z],bins=np.arange(80,122,2)) 

我可以使用imshow()来绘制它:

 plt.imshow(hist,cmap='Reds') 

得到:

在这里输入图像说明

但是,x轴值与input数据不匹配(即平均值为100,范围从80到122)。 因此,我想改变x轴来显示edges的值。

我努力了:

 ax = plt.gca() ax.set_xlabel([80,122]) # range of values in edges ... # this shifts the plot so that nothing is visible 

 ax.set_xticklabels(edges) ... # this labels the axis but does not centre around the mean: 

在这里输入图像说明

任何想法如何我可以更改轴值来反映我正在使用的input数据?

如果可能的话,我会尽量避免更改xticklabels ,否则,如果您使用其他数据xticklabels直方图,会变得非常混乱。

定义网格的范围可能是最好的, imshow可以通过添加extent关键字来完成。 这样轴自动调整。 如果你想改变标签,我可能会用一些格式化程序来使用set_xticks 。 直接更改标签应该是最后的手段。

 fig, ax = plt.subplots(figsize=(6,6)) ax.imshow(hist, cmap=plt.cm.Reds, interpolation='none', extent=[80,120,32,0]) ax.set_aspect(2) # you may also use am.imshow(..., aspect="auto") to restore the aspect ratio 

在这里输入图像说明