Xóa huyền thoại trên hình matplotlib


169

Để thêm một huyền thoại vào một cốt truyện matplotlib, người ta chỉ cần chạy legend().

Làm thế nào để loại bỏ một huyền thoại từ một cốt truyện?

(Lần gần nhất tôi đến đây là chạy legend([])để xóa huyền thoại khỏi dữ liệu. Nhưng điều đó để lại một hình chữ nhật màu trắng xấu xí ở góc trên bên phải.)

Câu trả lời:


229

Kể từ matplotlibv1.4.0rc4 , một removephương thức đã được thêm vào đối tượng huyền thoại.

Sử dụng:

ax.get_legend().remove()

hoặc là

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

Xem ở đây để cam kết nơi này đã được giới thiệu.


2
Vì một số lý do, ax.get_legend().remove()giải pháp không hoạt động trong trường hợp của tôi, trong khi giải pháp thứ hai ( legend = ax.legend() ... legend.remove()) hoạt động. có lẽ vì axlà một AxesSubplottrong trường hợp của tôi?
jhin

@naitsirhc, Cảm ơn sự chia sẻ của bạn.
Andrew Li

91

Nếu bạn muốn vẽ biểu đồ dữ liệu Pandas và muốn xóa chú giải, hãy thêm chú thích = Không làm tham số cho lệnh cốt truyện.

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

Bạn có thể sử dụng set_visiblephương pháp của huyền thoại :

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

Điều này dựa trên một câu trả lời được cung cấp cho tôi để trả lời cho một câu hỏi tương tự mà tôi đã có một thời gian trước đây ở đây

(Cảm ơn vì câu trả lời đó Jouni - Tôi xin lỗi tôi không thể đánh dấu câu hỏi là đã trả lời ... có lẽ ai đó có thẩm quyền có thể làm như vậy cho tôi?)


4
Điều này chỉ che giấu truyền thuyết và trên thực tế nó không loại bỏ đối tượng, phải không?
vlsd

16

bạn phải thêm các dòng mã sau:

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

gca () trả về tay cầm trục hiện tại và có chú thích thuộc tính đó_


Cảm ơn bạn, điều đó dường như làm việc. (Nhưng thật là một giao diện khủng khiếp ...) Tôi đề nghị thay thế draw()bằng show(). Hoặc có một lợi thế đặc biệt trong việc sử dụng draw?
Olivier Verdier

show()sẽ ổn nếu cập nhật biểu đồ là lệnh cuối cùng của chương trình. draw()là tốt, vì nó là lệnh cập nhật biểu đồ chung. Chẳng hạn, bạn có thể muốn nhắc người dùng về một số đầu vào trong một thiết bị đầu cuối sau khi cập nhật biểu đồ, điều này không thể thực hiện được với việc chặn show().
Eric O Lebigot

Đúng. Cảm ơn câu trả lời. Bây giờ tôi đồng ý rằng điều đó drawphù hợp hơn (nhưng tôi luôn sử dụng showđể cập nhật biểu đồ của mình ...).
Olivier Verdier

6

Nếu bạn không sử dụng các đối tượng vẽ hình và rìu, bạn có thể làm như vậy:

import matplotlib.pyplot as plt

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

3

nếu bạn gọi pyplotplt

frameon=False là xóa bỏ biên giới xung quanh truyền thuyết

và '' đang truyền thông tin rằng không có biến nào trong truyền thuyết

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

1

Tôi đã tạo một huyền thoại bằng cách thêm nó vào hình, chứ không phải một trục (matplotlib 2.2.2). Để loại bỏ nó, tôi đặt legendsthuộc tính của hình thành một danh sách trống:

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

Theo thông tin từ @naitsirhc, tôi muốn tìm tài liệu API chính thức. Dưới đây là phát hiện của tôi và một số mã mẫu.

  1. Tôi đã tạo ra một matplotlib.Axesđối tượng bằng cách seaborn.scatterplot().
  2. Các ax.get_legend()sẽ trả về một matplotlib.legned.Legendví dụ.
  3. Cuối cùng, bạn gọi .remove()hàm để xóa chú giải khỏi cốt truyện của bạn.
ax = sns.scatterplot(......)
_lg = ax.get_legend()
_lg.remove()

Nếu bạn kiểm tra matplotlib.legned.Legendtài liệu API, bạn sẽ không thấy .remove()chức năng.

Lý do là sự matplotlib.legned.Legendkế thừa matplotlib.artist.Artist. Do đó, khi bạn gọi ax.get_legend().remove()mà về cơ bản gọi matplotlib.artist.Artist.remove().

Cuối cùng, bạn thậm chí có thể đơn giản hóa mã thành hai dòng.

ax = sns.scatterplot(......)
ax.get_legend().remove()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.