在python中同时绘制imshow和line plot

2024-09-30 23:33:34 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧,我完全被一个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)
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图本身的图片,然后当我试图在其上添加线条图时:

plot with imshow onlyplot with imshow and line plot

在第二张图上,x轴上0左右的细线是压缩在0和60之间的图片1的全部。在

在这个问题上我将非常感激任何帮助。谢谢您。在


Tags: npfigpltintbadsetimshowremoved
2条回答

您可以使用imshow的extend=关键字,例如

plt.imshow(extend=(mjdaxis.min(),0,mjdaxis.max(),1000)

或者类似的事情。 但是你也应该记住,如果mjdaxis记号之间的间隙不是恒定的,你的直线图不会直接对应于图像,因为imshow图不会以与直线图相同的方式拉伸

您可以使用extentkwarg将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])

enter image description here

^{pr2}$

enter image description here

相关问题 更多 >