Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中同时绘制imshow和line plot_Python_Matplotlib - Fatal编程技术网

在python中同时绘制imshow和line plot

在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

好吧,我完全陷入了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绘图本身的图片,当我尝试在其上添加线条绘图时:

在第二个图中,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])