एक matplotlib आंकड़ा पर किंवदंती निकालें


169

मैटलपोटलिब प्लॉट में एक किंवदंती जोड़ने के लिए, एक बस चलता है legend()

एक किंवदंती को एक भूखंड से कैसे निकालना है?

(इस के सबसे करीब मैं यह आया है legend([])कि किंवदंती को डेटा से खाली करने के लिए दौड़ना है। लेकिन यह ऊपरी दाएं कोने में एक बदसूरत सफेद आयत छोड़ता है।)

जवाबों:


229

Matplotlib केv1.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

यदि आप पंडों के डेटाफ्रेम को प्लॉट करना चाहते हैं और लीजेंड को हटाना चाहते हैं, तो लीजेंड को शामिल करें = प्लॉट कमांड के पैरामीटर के रूप में कोई नहीं।

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()

यह कुछ समय पहले यहां दिए गए इसी तरह के प्रश्न के जवाब में मुझे दिए गए उत्तर पर आधारित है

(उस उत्तर के लिए धन्यवाद जौनी - मुझे खेद है कि मैं इस प्रश्न के उत्तर के रूप में चिह्नित करने में असमर्थ था ... शायद कोई ऐसा व्यक्ति जिसके पास अधिकार है, वह मेरे लिए ऐसा कर सकता है?)


4
यह केवल किंवदंती को छिपाता है और यह वास्तव में वस्तु को हटा नहीं सकता है, है ना?
vlsd

16

आपको कोड की निम्नलिखित पंक्तियों को जोड़ना होगा:

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

gca () वर्तमान कुल्हाड़ी के हैंडल को लौटाता है, और उसके पास प्रॉपर्टी लेजेंड_


धन्यवाद, यह काम करने लगता है। (लेकिन क्या एक भयानक इंटरफ़ेस ...) मैं draw()द्वारा प्रतिस्थापित करने का सुझाव देता हूं show()। या उपयोग करने में कोई विशेष लाभ है draw?
ओलिवियर वर्डीयर

show()यदि ग्राफ़ अपडेट किसी प्रोग्राम की अंतिम कमांड है तो ठीक होगा। draw()यह ठीक है, क्योंकि यह सामान्य ग्राफ अपडेट कमांड है। उदाहरण के लिए, आप ग्राफ़ को अपडेट करने के बाद टर्मिनल में कुछ इनपुट के लिए उपयोगकर्ता को संकेत देना चाहते हैं, जिसे ब्लॉकिंग के साथ नहीं किया जा सकता है show()
एरिक ओ लेबिगोट

सही। जवाब के लिए धन्यवाद। अब मैं सहमत हूं कि drawयह अधिक उपयुक्त है (लेकिन मैंने हमेशा showअपने रेखांकन को अद्यतन करने के लिए उपयोग किया है ...)।
ओलिवियर वर्डीयर

6

यदि आप अंजीर और कुल्हाड़ी की वस्तुओं का उपयोग नहीं कर रहे हैं, तो आप ऐसा कर सकते हैं:

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 से मिली जानकारी के अनुसार, मैं आधिकारिक एपीआई दस्तावेज खोजना चाहता था। यहाँ मेरी खोज और कुछ नमूना कोड हैं।

  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()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.