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 Figurelớp. Tôi sẽ thảo luận về cả hai trường hợp dưới đây.
pyplotlà 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 figthu đượ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, Figurelớp cung cấp các phương thức để xóa số liệu. Tôi sẽ giả sử sau đây figlà 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 figlà 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 figsẽ 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.cleartương đương clfvà Axes.cleartươ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
pyplotAPI 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).