source

Matplotlib 범례가 작동하지 않습니다.

manysource 2023. 8. 28. 21:13

Matplotlib 범례가 작동하지 않습니다.

matplotlib을 업그레이드한 이후 범례를 만들 때마다 다음 오류가 발생합니다.

/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30810>]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))
/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support [<matplotlib.lines.Line2D object at 0x3a30990>]
Use proxy artist instead.

http://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist

  warnings.warn("Legend does not support %s\nUse proxy artist instead.\n\nhttp://matplotlib.sourceforge.net/users/legend_guide.html#using-proxy-artist\n" % (str(orig_handle),))

이는 다음과 같은 사소한 스크립트에서도 발생합니다.

import matplotlib.pyplot as plt

a = [1,2,3]
b = [4,5,6]
c = [7,8,9]

plot1 = plt.plot(a,b)
plot2 = plt.plot(a,c)

plt.legend([plot1,plot2],["plot 1", "plot 2"])
plt.show()

오류의 원인을 진단하는 데 있어 오류가 가리키는 링크가 매우 유용하지 않다는 것을 발견했습니다.

쉼표를 추가해야 합니다.

plot1, = plt.plot(a,b)
plot2, = plt.plot(a,c)

쉼표가 필요한 이유는 명령에서 실제로 생성된 선 객체의 수에 관계없이 plt.plot()이 튜플을 반환하기 때문입니다.쉼표가 없으면 "plot1" 및 "plot2"는 선 객체 대신 튜플이므로 나중에 plt.legend() 호출이 실패합니다.

쉼표는 결과를 암시적으로 압축 해제하므로 튜플 대신 "plot1" 및 "plot2"가 자동으로 튜플 내의 첫 번째 객체, 즉 실제로 원하는 선 객체가 됩니다.

http://matplotlib.sourceforge.net/users/legend_guide.html#adjusting-the-order-of-legend-items

line, = plot(x,sin(x)) 쉼표는 무엇을 나타냅니까?

다음과 같이 "label" 키워드를 사용합니다.

plt.plot(x, y, label='x vs. y')

그런 다음 다음과 같이 범례를 추가합니다.

plt.legend()

범례는 두께, 색상 등과 같은 선 속성을 유지합니다.

enter image description here

사용하다handles아카Proxy artists

import matplotlib.lines as mlines
import matplotlib.pyplot as plt
# defining legend style and data
blue_line = mlines.Line2D([], [], color='blue', label='My Label')
reds_line = mlines.Line2D([], [], color='red', label='My Othes')

plt.legend(handles=[blue_line, reds_line])

plt.show()

그래프를 그리는 동안 레이블을 사용하면 범례만 사용할 수 있습니다.x축 이름 및 y축 이름이 범례 이름과 다릅니다.

언급URL : https://stackoverflow.com/questions/11983024/matplotlib-legends-not-working