2

好的,我完全被 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 之间。

对于这个问题的任何帮助,我将不胜感激。谢谢你。

4

2 回答 2

3

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

在此处输入图像描述

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

在此处输入图像描述

于 2012-09-19T01:31:40.630 回答
0

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

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

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

于 2012-09-19T01:05:16.003 回答