2017-02-21 17 views
3

私は完全にはっきりしているかどうかはわかりませんが、できるだけ明確にタイトルをつけようとしました。 私は3つの一連のデータを持っています(時間の経過に伴うイベントの数)。私は3つの時系列が表現されているサブプロットをしたいと思います。あなたは私が思い付くことができる最高のものを見つけるでしょう。最後の時系列はかなり短く、そのためにここには表示されません。imshowでプロットした時系列

対応するコードも追加していますので、どうして私がやろうとしているのか、アドバイスしてもらうことができます。ここで

import numpy as np 
import matplotlib.pyplot as plt 

x=np.genfromtxt('nbr_lig_bound1.dat') 
x1=np.genfromtxt('nbr_lig_bound2.dat') 
x2=np.genfromtxt('nbr_lig_bound3.dat') 
# doing so because imshow requieres a 2D array 
# best way I found and probably not the proper way to get it done 
x=np.expand_dims(x, axis=0) 
x=np.vstack((x,x)) 
x1=np.expand_dims(x1, axis=0) 
x1=np.vstack((x1,x1)) 
x2=np.expand_dims(x2, axis=0) 
x2=np.vstack((x2,x2)) 
# hoping that this would compensate for sharex shrinking my X range to 
# the shortest array 
ax[0].set_xlim(1,24) 
ax[1].set_xlim(1,24) 
ax[2].set_xlim(1,24) 


fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(6,6), sharex=True) 
fig.subplots_adjust(hspace=0.001) # this seem to have no effect 

p1=ax[0].imshow(x1[:,::10000], cmap='autumn_r') 
p2=ax[1].imshow(x2[:,::10000], cmap='autumn_r') 
p3=ax[2].imshow(x[:,::10000], cmap='autumn') 

私がこれまで達することができるものである: Actual results

、ここでは、私はウェブ上でそれを見つけることができなかったので、持っていたいもののスキームです。要するに、上の2つのグラフでプロットされたデータの周りの空白を削除したいと思います。さらに一般的な質問として、imshowがそのようなプロットを得るための最良の方法であるかどうかを知りたい(下記の意図された結果を参照)。各サブプロット内の垂直方向のスペースを調整しないゼロではなくfig.subplots_adjust(hspace=0)セットのサブプロット間の垂直方向(高さ)空間を使用

enter image description here

+0

入手した結果について、まったく気に入らないものを記載してください。 「希望の」プロットは非常に多くの面で異なりますが、あなたが本当に望むものは明確ではありません。 – ImportanceOfBeingErnest

+0

私はそれを確かにすることができます。私は上の2つのグラフでプロットされたデータの周りの空白を削除したいと思います。さらに一般的な質問として、imshowがそのようなプロットを得るための最良の方法であるかどうかを知りたいと思います(意図した結果を参照)。 –

+0

実際、プロットするデータポイントの数を増やすほど、プロット内の白いスペースが大きくなり、シンナーはデータを示すカラーライン/セクションになります。これは、私がここでimshowを使って間違った方向に向っているかもしれないと思う理由です。 –

答えて

1

。既定では、plt.imshowには、画像を正確に再現できるようにピクセルが正方形になるように通常設定されている既定の縦横比(rc image.aspect)があります。これを変更するには、aspect='auto'を使用し、それに応じて軸のylimを調整します。例えば

# you don't need all the `expand_dims` and `vstack`ing. Use `reshape` 
x0 = np.linspace(5, 0, 25).reshape(1, -1) 
x1 = x0**6 
x2 = x0**2 

fig, axes = plt.subplots(3, 1, sharex=True) 
fig.subplots_adjust(hspace=0) 

for ax, x in zip(axes, (x0, x1, x2)): 
    ax.imshow(x, cmap='autumn_r', aspect='auto') 
    ax.set_ylim(-0.5, 0.5) # alternatively pass extent=[0, 1, 0, 24] to imshow 
    ax.set_xticks([]) # remove all xticks 
    ax.set_yticks([]) # remove all yticks 

plt.show() 

利回り

enter image description here

カラーバーを追加するには、私はfig.add_axes()またはAxesDividerのドキュメントを見ている(これは私個人的に、より良いなどを使用するthis answerを見てお勧めします)。

関連する問題