python 軸ラベル マットプロットリブのx軸で休憩/




pyplot imshow (2)

xnxが提供するソリューションは良いスタートですが、x軸のスケールがプロット間で異なるという問題が残っています。 左側のプロットの範囲と右側のプロットの範囲が同じ場合、これは問題ではありませんが、等しくない場合、サブプロットは2つのプロットの幅を等しくします。そのため、x軸のスケールは2つのプロット(xnxの例の場合)。 これに対処するために、 brokenaxes たパッケージを作成しました。

この質問にはすでに答えがあります:

達成したいことを説明する最良の方法は、自分のイメージを使用することです。

スペクトルプロットには、特に5200〜6300の間に多くのデッドスペースがあります。私の質問は非常に単純です。

私はプロットにこのセットアップを使用しています:

nullfmt = pyplot.NullFormatter()

fig = pyplot.figure(figsize=(16,6))

gridspec_layout1= gridspec.GridSpec(2,1)
gridspec_layout1.update(left=0.05, right=0.97, hspace=0, wspace=0.018)
pyplot_top      = fig.add_subplot(gridspec_layout1[0])
pyplot_bottom   = fig.add_subplot(gridspec_layout1[1])

pyplot_top.xaxis.set_major_formatter(nullfmt)

gridpsecで達成できることは確かですが、高度なチュートリアルでは、これがどのように達成されるかを正確に説明しています。

また、この質問が以前にstackoverflowで処理されていたが、 gridSpec の正しい手順を広範囲に探していましたが、まだ何も見つかりませんでした。

私はこれまで、ほとんどそこに行くことができました:

しかし、私のブレークラインは私が望むほど急ではありません...それらを変更するにはどうすればよいですか? (以下の回答例を使用しました)


example を、x軸の中断に直接適合させることができます。

"""
Broken axis example, where the x-axis will have a portion cut out.
"""
import matplotlib.pylab as plt
import numpy as np


x = np.linspace(0,10,100)
x[75:] = np.linspace(40,42.5,25)

y = np.sin(x)

f,(ax,ax2) = plt.subplots(1,2,sharey=True, facecolor='w')

# plot the same data on both axes
ax.plot(x, y)
ax2.plot(x, y)

ax.set_xlim(0,7.5)
ax2.set_xlim(40,42.5)

# hide the spines between ax and ax2
ax.spines['right'].set_visible(False)
ax2.spines['left'].set_visible(False)
ax.yaxis.tick_left()
ax.tick_params(labelright='off')
ax2.yaxis.tick_right()

# This looks pretty good, and was fairly painless, but you can get that
# cut-out diagonal lines look with just a bit more work. The important
# thing to know here is that in axes coordinates, which are always
# between 0-1, spine endpoints are at these locations (0,0), (0,1),
# (1,0), and (1,1).  Thus, we just need to put the diagonals in the
# appropriate corners of each of our axes, and so long as we use the
# right transform and disable clipping.

d = .015 # how big to make the diagonal lines in axes coordinates
# arguments to pass plot, just so we don't keep repeating them
kwargs = dict(transform=ax.transAxes, color='k', clip_on=False)
ax.plot((1-d,1+d), (-d,+d), **kwargs)
ax.plot((1-d,1+d),(1-d,1+d), **kwargs)

kwargs.update(transform=ax2.transAxes)  # switch to the bottom axes
ax2.plot((-d,+d), (1-d,1+d), **kwargs)
ax2.plot((-d,+d), (-d,+d), **kwargs)

# What's cool about this is that now if we vary the distance between
# ax and ax2 via f.subplots_adjust(hspace=...) or plt.subplot_tool(),
# the diagonal lines will move accordingly, and stay right at the tips
# of the spines they are 'breaking'

plt.show()

目的に合わせて、データを2回プロットするだけです(各軸に1回、 axax2 を設定し、 xlim 適切に設定します。「ブレークライン」は、データ座標ではなく相対軸座標にプロットされるため、新しいブレークに一致するように移動する必要があります。

ブレークラインは、1組のポイント間に描かれたクリップされていないプロットラインです。 例えば、 ax.plot((1-d,1+d), (-d,+d), **kwargs) は、ポイント (1-d,-d)(1+d,+d) 間のブレークラインをプロットします最初の軸:これは右下の軸です。 グライデントを変更する場合は、これらの値を適切に変更してください。 たとえば、これを ax.plot((1-d/2,1+d/2), (-d,+d), **kwargs) 急にするには、 ax.plot((1-d/2,1+d/2), (-d,+d), **kwargs)





plot