在python中同时绘制imshow和line plot
好吧,我完全陷入了Python问题。我认为过于详细地描述问题会让人困惑,因此我将总结问题,然后展示我的代码 我已经创建了一个imshow绘图,在上面,我想绘制一个常规的线图。Y轴是不同的,这很好,但X轴应该是相同的 除了缩放之外,它几乎可以工作:在python中同时绘制imshow和line plot,python,matplotlib,Python,Matplotlib,好吧,我完全陷入了Python问题。我认为过于详细地描述问题会让人困惑,因此我将总结问题,然后展示我的代码 我已经创建了一个imshow绘图,在上面,我想绘制一个常规的线图。Y轴是不同的,这很好,但X轴应该是相同的 除了缩放之外,它几乎可以工作: fig = plt.figure() ax1 = fig.add_subplot(111) ax1.set_xlabel('MJD',fontsize=14) ax1.set_ylabel('Bin Number',fontsize=14) mjdax
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_xlabel('MJD',fontsize=14)
ax1.set_ylabel('Bin Number',fontsize=14)
mjdaxis=np.linspace(0,bad_removed_mjd.shape[0]-1,20).astype('int')
ax1.set_xticks(mjdaxis,[int(np.floor(bad_removed_mjd[i])) for i in mjdaxis])
ax1.imshow(residuals, aspect="auto")
ax2 = ax1.twinx()
ax2.set_ylabel('Pdot (s-2)',fontsize=14)
ax2.plot(pdot[8:,0],pdot[8:,1])
plt.show()
现在发生的是,imshow绘图在x轴上的值0-60左右之间挤压。这是因为它们现在由索引号0,1,2…绘制。。。。我需要它们的x轴值与列表“bad_mjd_removed”55304、55365、55401中的值对应。。。。当我只拥有imshow的情节时,这很好用
以下是imshow绘图本身的图片,当我尝试在其上添加线条绘图时:
在第二个图中,x轴上0附近的细线是在0和60之间压缩的图片1的全部
如果能在这个问题上得到任何帮助,我将不胜感激。谢谢。您可以使用imshow的extend=关键字,例如
plt.imshow(extend=(mjdaxis.min(),0,mjdaxis.max(),1000)
或者类似的。
但是您还应该记住,如果mjdaxis记号之间的间隙不是恒定的,那么您的线图将不会直接对应于图像,因为imshow图不会以与线图相同的方式拉伸,您可以使用
区段kwarg将imshow图放置在正确的位置。另外,如果您也这样做了,您应该能够让matplotlib自动处理轴记号
import matplotlib.pyplot as plt
import numpy as np
x = np.random.rand(2,3)
plt.imshow(x, interpolation='nearest', extent=[0,3,0,2])
Hmmm。。不,不幸的是,勾号不是很恒定。如果间隙不相同,并且您仍然希望图像的x轴和线图之间直接对应,我认为您必须以恒定间隙将图像插值到mjdaxis上的线性比例。我正在尝试上述解决方案。检查一下,它应该是“范围”而不是“扩展”吗?谢谢
plt.imshow(x, interpolation='nearest', extent=[100,103,100,102])