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...でプロットされているためです。リスト'bad_mjd_removed' 55304、55365、55401...の値に対応するx軸の値が必要です。これは正常に機能します。私がimshowプロットを単独で持っているとき。

これは、imshowプロット自体の写真であり、その上に折れ線グラフを追加しようとすると、次のようになります。

imshowのみでプロット imshowと折れ線グラフでプロット

2番目のプロットでは、x軸の0付近の細い線は、0と60の間に挟まれた画像1全体です。

この問題についての助けをいただければ幸いです。ありがとうございました。

4

2 に答える 2

3

kwarg を使用extentして、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

1つの可能性は、imshowのextend=キーワードを使用することです。

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

またはそのようなもの。ただし、mjdaxisの目盛り間のギャップが一定でない場合、imshowプロットは折れ線グラフと同じように引き伸ばされないため、折れ線グラフは画像に直接対応しないことにも注意してください。

于 2012-09-19T01:05:16.003 に答える