Câu trả lời:
Tất cả đều làm những việc khác nhau, vì matplotlib sử dụng một thứ tự phân cấp trong đó một cửa sổ hình chứa một hình có thể bao gồm nhiều trục. Ngoài ra, có các chức năng từ giao diện pyplot và có các phương thức trên Figure
lớp. Tôi sẽ thảo luận về cả hai trường hợp dưới đây.
pyplot
là một mô-đun thu thập một vài chức năng cho phép matplotlib được sử dụng theo cách thức chức năng. Tôi ở đây cho rằng pyplot
đã được nhập khẩu như import matplotlib.pyplot as plt
. Trong trường hợp này, có ba lệnh khác nhau loại bỏ công cụ:
plt.cla()
xóa một trục , tức là các trục hiện đang hoạt động trong hình hiện tại. Nó để lại các trục khác không bị ảnh hưởng.
plt.clf()
xóa toàn bộ hình hiện tại bằng tất cả các trục của nó, nhưng để cửa sổ mở, để nó có thể được sử dụng lại cho các ô khác.
plt.close()
đóng một cửa sổ , sẽ là cửa sổ hiện tại, nếu không được chỉ định khác.
Do đó, chức năng nào phù hợp với bạn nhất phụ thuộc vào trường hợp sử dụng của bạn.
Các close()
chức năng hơn nữa cho phép một để xác định các cửa sổ nên được đóng lại. Đối số có thể là một số hoặc tên được đặt cho một cửa sổ khi nó được tạo bằng cách sử dụng figure(number_or_name)
hoặc nó có thể là một thể hiện hình fig
thu được, tức là sử dụng fig = figure()
. Nếu không có đối số nào được đưa ra close()
, cửa sổ hiện đang hoạt động sẽ bị đóng. Hơn nữa, có cú pháp close('all')
, đóng tất cả các số liệu.
Ngoài ra, Figure
lớp cung cấp các phương thức để xóa số liệu. Tôi sẽ giả sử sau đây fig
là một ví dụ của Figure
:
fig.clf()
xóa toàn bộ con số . Cuộc gọi này chỉ tương đương plt.clf()
nếu fig
là con số hiện tại.
fig.clear()
là một từ đồng nghĩa với fig.clf()
Lưu ý rằng thậm chí del fig
sẽ không đóng cửa sổ hình liên quan. Theo như tôi biết thì cách duy nhất để đóng cửa sổ hình là sử dụng plt.close(fig)
như mô tả ở trên.
clear()
, tôi đã không thấy nhiều sự khác biệt với cla()
chỉ trong trục ký sinh trùng chỉ cla()
được điều trị đặc biệt.
clear()
chức năng nào trong matplotlib.pyplot
(Phiên bản 1.4.2 trên MacOS) của tôi. Bạn có thể hướng tôi đến các tài liệu liên quan?
clear()
phương thức. Các Figure.clear
tương đương clf
và Axes.clear
tương đương với cla
.
Chỉ có một cảnh báo mà tôi phát hiện ra ngày hôm nay. Nếu bạn có một chức năng đang gọi một cốt truyện rất nhiều lần bạn nên sử dụng tốt hơn plt.close(fig)
thay vì fig.clf()
bằng cách nào đó, cái đầu tiên không tích lũy trong bộ nhớ. Tóm lại, nếu bộ nhớ là mối quan tâm, hãy sử dụng plt.close (fig) (Mặc dù có vẻ như có nhiều cách tốt hơn, hãy đi đến cuối nhận xét này cho các liên kết có liên quan).
Vì vậy, đoạn script sau sẽ tạo ra một danh sách trống:
for i in range(5):
fig = plot_figure()
plt.close(fig)
# This returns a list with all figure numbers available
print(plt.get_fignums())
Trong khi đó, cái này sẽ tạo ra một danh sách với năm con số trên đó.
for i in range(5):
fig = plot_figure()
fig.clf()
# This returns a list with all figure numbers available
print(plt.get_fignums())
Từ tài liệu trên không rõ ràng cho tôi sự khác biệt giữa đóng hình và đóng cửa sổ. Có lẽ điều đó sẽ làm rõ.
Nếu bạn muốn thử một kịch bản hoàn chỉnh, bạn có:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(1000)
y = np.sin(x)
for i in range(5):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
plt.close(fig)
print(plt.get_fignums())
for i in range(5):
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
fig.clf()
print(plt.get_fignums())
Nếu bộ nhớ là mối quan tâm ai đó đã đăng một công việc trong SO hãy xem: Tạo một số liệu được tính tham chiếu
pyplot
API tiêu chuẩn .
plt.cla () có nghĩa là trục hiện tại rõ ràng
plt.clf () có nghĩa là con số hiện tại rõ ràng
Ngoài ra, có plt.gca () (lấy trục hiện tại) và plt.gcf () (lấy số liệu hiện tại)
Đọc thêm tại đây: Matplotlib, Pyplot, Pylab, v.v .: Sự khác biệt giữa những thứ này và khi nào nên sử dụng?
close()
là một lệnh không cụ thể, tôi đã tìm cách chỉ định đóng hình (fig.close()
không phải là hàm). Cú pháp đúng là :plt.close(fig)
.