2017-08-09 8 views
2

2つのサブプロットに同じ凡例を表示させ、2つのサブプロットに拡張する方法はありますか?プロットは科学論文用です)?私は、後者の質問はコンピューティングとは関係ないことを知っていますが、回答を知っている人がいれば、私はそれを感謝します。私が使用して伝説の配置については 2つのサブプロットの拡大凡例

 ax[0].legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3, 
       ncol= 4, mode="expand", borderaxespad=0) 

plots

+0

これはmatplolibの質問ですか? –

+0

はいそうです。このフォーラムに合っていませんか? – Tassou

+0

それは適しています。それは、matplotlibタグでもっと答えを受け取るかもしれません。私はそれを追加します。 –

答えて

1

は、両方のサブプロット間で伝説のストレッチを行うには、bbox_to_anchorに与えられた座標を調整する必要があります。幅(第3引数)に2.2を使用すると、プロットの幅とサブプロット間の間隔の2倍をカバーします。 (。あなたは、デフォルトとは異なる間隔を有する場合は、f.tightlayout()のように、この値が必要になります調整)

は、ここで簡単な作業例です:

import numpy as np 
import matplotlib.pyplot as plt 

x1 = np.linspace(0.0, 2.0) 
x2 = np.linspace(0.0, 2.0) 

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1) 
y2 = np.cos(2 * np.pi * x2) 

f,ax = plt.subplots(1, 2) 

ax[0].plot(x1, y1, 'ko-', label='Damped') 
ax[0].plot(x2, y2, 'r.-', label='Undamped') 
ax[1].plot(x1, y1, 'ko-', label='Damped') 
ax[1].plot(x2, y2, 'r.-', label='Undamped') 

ax[0].legend(bbox_to_anchor=(0., 1.02, 2.2, .102), loc=3, 
       ncol=4, mode="expand", borderaxespad=0) 

plt.show() 

結果は、このプロットである:

enter image description here

+0

ありがとう、それは私が必要としていたものです – Tassou

1

図内のすべてのサブプロットにわたって凡例をストレッチするには、凡例プレースメントを半自動化することができます。図からのsubplotparsを使用すると、使用された間隔を見つけることができ、その間隔がbbox_to_anchor引数で直接使用できるようになります。これには、bbox_transform引数を使用して凡例変換を図形変換に設定する必要があります。手動で指定する必要がある唯一のパラメータは、軸と凡例の間隔(下の例では0.02)と凡例の高さ(例では0.05以下)です(両方とも図形の高さ単位)。

s = fig.subplotpars 
bb=[s.left, s.top+0.02, s.right-s.left, 0.05 ] 
leg = axes[0].legend(..., bbox_to_anchor=bb, mode="expand", borderaxespad=0, 
        bbox_transform=fig.transFigure) 

完全な例は:

import matplotlib.pyplot as plt 
import numpy as np 

a = np.cumsum(np.random.rand(10,8), axis=0) 

fig, axes = plt.subplots(ncols=2) 

for i in range(a.shape[1]): 
    axes[i//4].plot(a[:,i], marker="s", label="Label {}".format(i)) 

s = fig.subplotpars 
bb=[s.left, s.top+0.02, s.right-s.left, 0.05 ] 
leg = axes[0].legend(loc=8, bbox_to_anchor=bb, ncol= 4, mode="expand", borderaxespad=0, 
       bbox_transform=fig.transFigure, fancybox=False, edgecolor="k") 
leg.get_frame().set_linewidth(72./fig.dpi) 
plt.show() 

enter image description here

あなたが科学論文に1つのまたは2の伝説を必要とするかどうかのように、これは紙のスタイルに完全にdependendです。私は、ここのような単一の伝説を使っても大丈夫だと思います。しかし、ジャーナルでは、ほとんどの場合、サブプロットにabまたは(a)(b)のような小文字を付ける必要があります。

関連する問題