繁体   English   中英

在python中一起绘制imshow和线图

[英]plotting imshow and line plot together in 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 图本身的图片,然后当我尝试在其上添加线图时:

仅使用 imshow 绘图用 imshow 和线图绘制

在第二个图中,x 轴上 0 附近的细线是整个图片 1,它被挤压在 0 和 60 之间。

我将非常感谢您对这个问题的任何帮助。 谢谢你。

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

在此处输入图片说明

plt.imshow(x, interpolation='nearest', extent=[100,103,100,102])

在此处输入图片说明

您的一种可能性是使用 imshow 的 extend= 关键字,例如

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

或类似的东西。 但您还应该记住,如果 mjdaxis 刻度线之间的间隙不是恒定的,您的线图将不会直接对应于图像,因为 imshow 图不会以与线图相同的方式拉伸

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM