1. ホーム
  2. python

[解決済み] matplotlibのpyplotの凡例で線の幅を変更する [duplicate].

2023-04-17 10:42:45

質問

pyplotの凡例で紹介されているラインサンプルの太さ/幅を変更したいです。

凡例内の線サンプルの線幅は、それらがプロットで表現する線と同じです (従って、もし線が y1linewidth=7.0 である場合、凡例に対応する y1 ラベルもまた linewidth=7.0 ).

凡例の線はプロットで紹介されている線より太くしてほしい。

例えば、以下のコードでは以下のような画像が生成されます。

import numpy as np
import matplotlib.pyplot as plt

# make some data
x = np.linspace(0, 2*np.pi)

y1 = np.sin(x)
y2 = np.cos(x)

# plot sin(x) and cos(x)
fig = plt.figure()
ax  = fig.add_subplot(111)
ax.plot(x, y1, c='b', label='y1',linewidth=7.0)
ax.plot(x, y2, c='r', label='y2')

leg = plt.legend()
plt.show()

を設定したいのですが y1 というラベルを凡例に設定したい。 linewidth=7.0 であるのに対し、凡例では y1 の線は異なる幅を持っています ( linewidth=1.0 ).

私はオンラインで解決策を見つけることに失敗しました。唯一の関連する問題は、凡例のバウンディング ボックスの線幅を変更するための回答が leg.get_frame().set_linewidth(7.0) . これは、線の線幅を変更しません。 内の の行の幅は変わりません。

どのように解決するのですか?

@ImportanceOfBeingErnest さんの回答は、凡例ボックス内の線幅を変更したいだけであれば、良い回答です。しかし、凡例の線幅を変更する前にハンドルをコピーする必要があるので、それは少し複雑だと思います。また、凡例ラベルのフォントサイズを変更することはできません。次の2つのメソッドは、より簡潔な方法で、線幅だけでなく、凡例ラベルのテキストフォントサイズを変更することができます。

方法1

import numpy as np
import matplotlib.pyplot as plt

# make some data
x = np.linspace(0, 2*np.pi)

y1 = np.sin(x)
y2 = np.cos(x)

# plot sin(x) and cos(x)
fig = plt.figure()
ax  = fig.add_subplot(111)
ax.plot(x, y1, c='b', label='y1')
ax.plot(x, y2, c='r', label='y2')

leg = plt.legend()
# get the individual lines inside legend and set line width
for line in leg.get_lines():
    line.set_linewidth(4)
# get label texts inside legend and set font size
for text in leg.get_texts():
    text.set_fontsize('x-large')

plt.savefig('leg_example')
plt.show()

方法2

import numpy as np
import matplotlib.pyplot as plt

# make some data
x = np.linspace(0, 2*np.pi)

y1 = np.sin(x)
y2 = np.cos(x)

# plot sin(x) and cos(x)
fig = plt.figure()
ax  = fig.add_subplot(111)
ax.plot(x, y1, c='b', label='y1')
ax.plot(x, y2, c='r', label='y2')

leg = plt.legend()
# get the lines and texts inside legend box
leg_lines = leg.get_lines()
leg_texts = leg.get_texts()
# bulk-set the properties of all lines and texts
plt.setp(leg_lines, linewidth=4)
plt.setp(leg_texts, fontsize='x-large')
plt.savefig('leg_example')
plt.show()

上記の2つの方法は、同じ出力画像を生成します。