使用两个x轴时,如何保持绘图的纵横比?下面的代码很好地显示了宽高比25/111的图像。
import numpy as np
import matplotlib.pyplot as plt
data = np.ones((25, 111))
specFig, specAx = plt.subplots()
specAx.set_xlim([0, data.shape[1]])
#newax = specAx.twiny()
#newax.set_xlim([0, data.shape[1]])
specAx.imshow(data, origin="lower")
plt.show()
然而,当取消注释这些线时,它变成一个相当二次的图像,其第二个x轴显示从0到111的值,而第一个x轴只显示约25个值的剪切。
答案 0 :(得分:2)
奇怪的是,我无法通过axis('tight')
,axis('scaled')
等,specAx.set_aspect(aspect, adjustable='box')
,关闭autoscale
或其他任何内容来使轴看起来正确。我在matplotlib中遇到过类似的双轴问题,并且使用matplotlib的parasiteaxis
作为解决方法,对于你的情况来说,
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
data = np.ones((25, 111))
specFig = plt.figure()
specAx = host_subplot(111, axes_class=AA.Axes)
specAx.set_xlim([0, data.shape[1]])
specAx.imshow(data, origin="lower")
#Add parasite axis
newax = specAx.get_grid_helper().new_fixed_axis
specAx.axis["top"] = newax(loc="top", axes=specAx)
plt.show()
编辑:如果需要调整顶轴,之前的解决方案可能并不理想(顶部轴不是轴对象)。我设法使用box-forced关键字设置宽高比如下:
import numpy as np
import matplotlib.pyplot as plt
data = np.ones((25, 111))
specFig, specAx = plt.subplots()
specAx.set_xlim([0, data.shape[1]])
newax = specAx.twiny()
newax.set_xlim([0, data.shape[1]])
specAx.imshow(data, origin="lower")
specAx.set_aspect('equal', 'box-forced')
newax.set_aspect('equal', 'box-forced')
plt.show()
然后你应该能够调整滴答等。