ลบคำอธิบายแผนภูมิบนรูป 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 ขอขอบคุณการแบ่งปันของคุณ
Andrew Li

91

หากคุณต้องการพล็อตฐานข้อมูล Pandas และต้องการลบคำอธิบายออกให้เพิ่ม legend = 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วิธีการของ legend :

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 คุณสามารถทำได้ดังนี้:

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.Axesseaborn.scatterplot()
  2. ax.get_legend()จะกลับmatplotlib.legned.Legendอินสแตนซ์
  3. สุดท้ายคุณเรียก.remove()ใช้ฟังก์ชันเพื่อลบคำอธิบายออกจากพล็อตของคุณ
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

หากคุณตรวจสอบmatplotlib.legned.Legendเอกสาร API คุณจะไม่เห็น.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.