これで問題は解決しますか?
x = [ 1, 2, 3, 5, 10, 100, 1000 ]
y1 = [ 1, 0.822, 0.763, 0.715, 0.680, 0.648, 0.645 ]
y2 = [ 1, 0.859, 0.812, 0.774, 0.746, 0.721, 0.718 ]
import matplotlib.pyplot as plt
from matplotlib.transforms import BlendedGenericTransform
# mode 01 from one case
fig1 = plt.figure()
ax1 = fig1.add_subplot(111)
line1, = ax1.plot(x, y1, label='mode 01')
# mode 01 from other case
fig2 = plt.figure()
ax2 = fig2.add_subplot(111)
line2, = ax2.plot(x, y2, label='mode 01')
# Create new figure and two subplots, sharing both axes
fig3, (ax3, ax4) = plt.subplots(1,2,sharey=True, sharex=True,figsize=(10,5))
# Plot data from fig1 and fig2
line3, = ax3.plot(line1.get_data()[0], line1.get_data()[1])
line4, = ax4.plot(line2.get_data()[0], line2.get_data()[1])
# If possible (easy access to plotting data) use
# ax3.plot(x, y1)
# ax4.lpot(x, y2)
ax3.set_ylabel('y-axis')
ax3.grid(True)
ax4.grid(True)
# Add legend
fig3.legend((line3, line4),
('label 3', 'label 4'),
loc = 'upper center',
bbox_to_anchor = [0.5, -0.05],
bbox_transform = BlendedGenericTransform(fig3.transFigure, ax3.transAxes))
# Make space for the legend beneath the subplots
plt.subplots_adjust(bottom = 0.2)
# Show only fig3
fig3.show()
編集
の下に見られるように、これは、アップロードしたzipファイル内のコードを見てみると、出力を与え、私は要求された機能の大部分が達成されるでしょうね?
プロットを作成する機能を変更して、別の図から2つのサブプロットを「マージ」しようとしていないため、問題を根本的に解決することができます。あなたのソリューションは基本的には、同じ数字上に同じ図のサブプロットとしてAxes
のインスタンスを作成していて、ならプロットではなく、プロットを作成してから、あなたの質問が元々のものだったので、軸を動かしてください。私が疑われるよう
は、最も簡単で自明な解決策は、(もし容易に達成されていない別のFigure
から1つのAxes
インスタンスを移動させるように、代わりに、それらは別々の図面に関連付けられ有する同図の個々Axes
サブプロットを作ることです可能であれば)、コメントに指定されています。 Figure
の_axstack
にAxes
インスタンスを単に追加するだけで、目的のレイアウトにカスタマイズすることが難しくなるため、「元の」問題はまだ達成するのが難しいようです。
伝説を作るためにあなたの現在のコードの
ax.legend(...
に対する一つの変更は、単に軸下の最上部に、水平方向の中央
:ここ
# Add this line
from matplotlib.transforms import BlendedGenericTransform
# Edit the function call to use the BlendedGenericTransform
ax.legend(loc='upper center',
ncol=7,
labelspacing=-0.7,
columnspacing=0.75,
fontsize=8,
handlelength=2.6,
markerscale=0.75,
bbox_to_anchor=(0.5, -0.05),
bbox_transform=BlendedGenericTransform(fig.transFigure, ax.transAxes))
、bbox_to_anchor
引数はの境界内に収まるようにカスタマイズする必要があります私たちの姿。
BlendedGenericTransform
は、x軸とy軸の変換が異なることを可能にします。これは、多くの状況で非常に便利です。
「sharey」オプションを使用して、これらのデータを2つのサブプロットとして1つの図に単純にプロットすることはできません。 2つの別個の図を作成してから、その図を抽出して新しい図形に結合する必要があります。 – hooy
私はshareyオプションを試しましたが、データ自体ではなく[軸の制限とビュー](http://matplotlib.org/users/recipes.html)のみを共有しているようです...現在のコードではこれらの個体を作成しています数字、私はこのコードを変更する前にそれらを組み合わせてみたいと思います... –
私はまだそれがあなたが達成したいことを完全に理解していません。含まれたサンプルプロット(画像#1)から、y軸は共有され、各プロットのデータは1つのサブプロット_にのみプロットされます。つまり、プロットは独立しています。上のあなたのコメントから、_both_行を_both_のサブプロットにプロットしたいと思うでしょうか?たとえば、サブプロット番号1にのみプロットされた行番号1と、サブプロット番号2にのみプロットされた2行目(y軸には同じy軸がある)が必要な場合は、これは簡単です。また、 'ax1.plot(...'? – hooy