在保持轴大小的情况下,在imshow上绘制Matplotlib
每当我使用在保持轴大小的情况下,在imshow上绘制Matplotlib,matplotlib,plot,overlay,axis,imshow,Matplotlib,Plot,Overlay,Axis,Imshow,每当我使用imshow()打印图像时,在其上以成对的底部x轴打印1D数据会更改使用forimshow()创建的初始x轴的大小和纵横比。我如何避免这种行为?以下是如何重现该问题: import numpy as np import matplotlib matplotlib.use('macosx') import matplotlib.pyplot as plt im = np.random.rand(2856, 4290) light_curve = im[1000, :] fig = p
imshow()
打印图像时,在其上以成对的底部x轴打印1D数据会更改使用forimshow()创建的初始x轴的大小和纵横比。我如何避免这种行为?以下是如何重现该问题:
import numpy as np
import matplotlib
matplotlib.use('macosx')
import matplotlib.pyplot as plt
im = np.random.rand(2856, 4290)
light_curve = im[1000, :]
fig = plt.figure(1, figsize=(10,10))
ax1 = plt.subplot(2,1,1)
ax1.imshow(im, cmap='gray', origin='lower')
ax2 = plt.subplot(2,1,2)
ax2.imshow(im, cmap='gray', origin='lower')
# Setting aspect ratio to equal does not help
ax2.set_aspect('equal')
ax21 = ax2.twinx()
ax21.plot(light_curve, alpha=0.7)
# Setting axis limits does not help
ax1.axis([0, im.shape[1], 0, im.shape[0]])
ax21.set_xlim([0, im.shape[1]])
下面是我的图形后端的外观(macosx
,如果相关的话)
上面使用的twinx()
的目的不就是为了帮助解决这个问题吗?
因此,如何保持初始imshow()
x轴固定,并使1D绘图的后续轴简单匹配,而不调整大小或干扰纵横比,也不完全手动构建轴 这确实有点不幸,相位没有传播到双轴,因为它周围有相同的盒子
我认为克服这一问题的唯一方法是手动计算纵横比,并将其设置为双轴
import numpy as np
import matplotlib.pyplot as plt
im = np.random.rand(285, 429)
light_curve = im[100, :]
fig = plt.figure(1, figsize=(8,8))
ax1 = plt.subplot(2,1,1)
ax1.imshow(im, cmap='gray', origin='lower')
ax2 = plt.subplot(2,1,2)
ax2.imshow(im, cmap='gray', origin='lower')
ax2.set_aspect("equal", "box-forced")
ax21 = ax2.twinx()
ax21.plot(light_curve, alpha=0.7)
# Setting axis limits does not help
ax21.set_xlim(ax1.get_xlim())
a = np.diff(ax21.get_ylim())[0]/np.diff(ax1.get_xlim())*im.shape[1]/im.shape[0]
ax21.set_aspect(1./a, "box-forced")
plt.show()
谢谢,它工作得很好。我会玩得更多一点,看看如果我玩任意一个轴,情况有多稳定。