matplotlib 그림에서 범례 제거


169

matplotlib 플롯에 범례를 추가하려면 간단히 실행 legend()합니다.

줄거리에서 범례 를 제거 하는 방법 ?

(내가 가장 가까운 것은 legend([])데이터에서 범례를 비우기 위해 실행 하는 것입니다. 그러나 오른쪽 상단 모서리에 못생긴 흰색 사각형이 남습니다.)

답변:


229

현재 하기 matplotlibv1.4.0rc4 하는 remove방법은 범례 객체에 추가되었다.

용법:

ax.get_legend().remove()

또는

legend = ax.legend(...)
...
legend.remove()

이것이 도입 된 커밋에 대해서는 여기 를 참조 하십시오 .


2
어떤 이유로 든 제 ax.get_legend().remove()솔루션은 작동하지 않지만 두 번째 솔루션 ( legend = ax.legend() ... legend.remove())은 작동했습니다. 아마도 내 경우에 ax있었을 AxesSubplot까요?
jhin

@naitsirhc, 공유해 주셔서 감사합니다.
앤드류 리

91

Pandas 데이터 프레임을 플로팅하고 범례를 제거하려면 plot = None을 매개 변수로 plot 명령에 추가하십시오.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

df2 = pd.DataFrame(np.random.randn(10, 5))
df2.plot(legend=None)
plt.show()

86

범례의 set_visible방법을 사용할 수 있습니다 .

ax.legend().set_visible(False)
draw()

이것은 내가 얼마 전에 여기에 했던 비슷한 질문에 대한 대답으로 나에게 제공된 대답을 기반으로합니다.

(해당 답변에 감사드립니다. Jouni-질문에 답변으로 표시 할 수 없어서 죄송합니다. 아마도 권한을 가진 사람이 저를 위해 그렇게 할 수 있습니까?)


4
이것은 범례 만 숨기고 실제로 객체를 제거하지는 않습니다.
vlsd

16

다음 코드 줄을 추가해야합니다.

ax = gca()
ax.legend_ = None
draw()

gca ()는 현재 좌표축 핸들을 반환하며 그 속성은 legend_입니다.


고맙습니다, 작동하는 것 같습니다. (하지만 끔찍한 인터페이스 ...) 나는 대체하는 제안 draw()에 의해 show(). 또는 사용시 특별한 이점이 draw있습니까?
Olivier Verdier

show()그래프 업데이트가 프로그램의 마지막 명령 인 경우 정상입니다. draw()일반적인 그래프 업데이트 명령이므로 괜찮습니다. 예를 들어, 그래프를 업데이트 한 후 사용자에게 터미널에서 입력을 요청하는 메시지를 표시 할 수 있습니다 show(). 이는 차단으로 수행 할 수 없습니다 .
Eric O Lebigot

권리. 답변 해주셔서 감사합니다. 이제는 draw더 적절 하다는 데 동의합니다 (그러나 항상 show그래프를 업데이트 하는 데 사용 했습니다 ...).
Olivier Verdier

6

fig와 ax plot 객체를 사용하지 않는다면 다음과 같이 할 수 있습니다 :

import matplotlib.pyplot as plt

# do plot specifics
plt.legend('')
plt.show()

3

전화 pyplot하면plt

frameon=False 범례 주변의 테두리를 제거하는 것입니다

''는 범례에 변수가 없어야한다는 정보를 전달합니다.

import matplotlib.pyplot as plt
plt.legend('',frameon=False)

1

축이 아닌 그림에 추가하여 범례를 만들었습니다 (matplotlib 2.2.2). 그것을 제거하기 legends위해 그림 의 속성을 빈 목록으로 설정했습니다.

import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()

ax1.plot(range(10), range(10, 20), label='line 1')
ax2.plot(range(10), range(30, 20, -1), label='line 2')

fig.legend()

fig.legends = []

plt.show()

0

@naitsirhc의 정보에 따르면 공식 API 설명서를 찾고 싶었습니다. 여기에 내가 찾은 것과 샘플 코드가 있습니다.

  1. 나는 matplotlib.Axes객체를 만들었습니다.seaborn.scatterplot() .
  2. ax.get_legend()반환matplotlib.legned.Legend 인스턴스를.
  3. 마지막으로 .remove()함수를 호출 하여 플롯에서 범례를 제거합니다.
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

matplotlib.legned.LegendAPI 문서 를 확인 하면 .remove()기능 이 표시되지 않습니다 .

그 이유는 matplotlib.legned.Legend상속 된 것 matplotlib.artist.Artist입니다. 따라서 ax.get_legend().remove()기본적으로 호출하면 matplotlib.artist.Artist.remove().

결국 코드를 ​​두 줄로 단순화 할 수도 있습니다.

ax = sns.scatterplot(......)
ax.get_legend().remove()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.