使用imshow和twiny:无法设置xlim

时间:2018-04-05 08:21:17

标签: python matplotlib plot imshow

我正在尝试使用pyplot绘制图像和一些线条。另外,我需要有两个x轴,一个在底部,一个在顶部。假设较低的一个应该有五个刻度,范围从0到5,而较高的一个也应该有五个刻度,但范围从36到41,这些刻度应该对齐。这可以通过以下方式轻松完成:

from matplotlib import pyplot as plt

fig, ax1 = plt.subplots()
ax1.axis([0,5,10,20])      # set bottom axis limits
plt.grid()
ax2 = plt.twiny()
ax2.axis([36,41,10,20])    # set top axis limits
plt.show()

产生:

enter image description here

但是,一旦我使用imshow,我似乎无法正确设置底部x轴的限制:

import numpy as np
from matplotlib import pyplot as plt
# Using a small checkerboard as image
a = np.array([[0,1],[1,0]])
fig, ax1 = plt.subplots()
ax1.axis([0,5,10,20])     # Set lower axis limits -> are ignored
ax1.imshow(a, extent=(0,5,10,20))
plt.grid()
ax2 = plt.twiny()         # If these two lines are commented
ax2.axis([36,41,10,20])   # imshow behaves as expected
plt.show()

产生:

enter image description here

如何在保持轴对齐的刻度的同时显示图像?

1 个答案:

答案 0 :(得分:1)

这里有两个相互矛盾的约束:

  • 设置为轴的限制。
  • 图像的等长宽比。

您可以放松其中一个,即如果您想指定限制,请自动设置方面,

ax1.imshow(a, extent=(0,5,10,20), aspect="auto")

enter image description here