更改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