Làm cách nào để tạo một subplot trống trong matplotlib?


82

Tôi đang tạo một nhóm subplot (giả sử, 3 x 2) trong matplotlib, nhưng tôi có ít hơn 6 bộ dữ liệu. Làm cách nào tôi có thể làm trống ô phụ còn lại?

Sự sắp xếp trông như thế này:

+----+----+
| 0,0| 0,1|
+----+----+
| 1,0| 1,1|
+----+----+
| 2,0| 2,1|
+----+----+

Điều này có thể diễn ra trong một số trang, nhưng ở trang cuối cùng, ví dụ, có 5 bộ dữ liệu cho ô 2,1 sẽ trống. Tuy nhiên, tôi đã khai báo con số là:

cfig,ax = plt.subplots(3,2)

Vì vậy, trong không gian cho ô con 2,1 có một tập hợp các trục mặc định với dấu tích và nhãn. Làm thế nào tôi có thể lập trình làm cho không gian đó trống và không có trục?

Câu trả lời:


138

Bạn luôn có thể ẩn các trục mà bạn không cần. Ví dụ: đoạn mã sau sẽ tắt hoàn toàn các trục thứ 6:

import matplotlib.pyplot as plt

hf, ha = plt.subplots(3,2)
ha[-1, -1].axis('off')

plt.show()

và kết quả trong hình sau:

Hình ảnh của lưới đồ thị 3x2, không có đồ thị nào được hiển thị ở ô dưới cùng bên phải

Ngoài ra, hãy xem câu trả lời được chấp nhận cho câu hỏi Ẩn văn bản trục trong biểu đồ matplotlib để biết cách giữ các trục nhưng ẩn tất cả các trang trí trục (ví dụ: dấu tích và nhãn).


Cảm ơn - điều đó thực sự thậm chí còn gần hơn với câu hỏi ban đầu của tôi. Tôi đã chấp nhận câu trả lời kia và điều chỉnh mã của mình để sử dụng nó, nhưng cả hai cách tiếp cận đều tuyệt vời.
mishaF

Tuyệt, điều đó thực sự tốt vì ít add_subplot()lộn xộn hơn .
moooeeeep

Điều này là tuyệt vời!
FaCoffee

Điều này không cho thấy cốt truyện và ai có thể nói rằng đây là một âm mưu trống. Tôi đang tìm một biểu đồ không có dữ liệu, để thể hiện rõ ràng rằng không có dữ liệu. Bất kỳ sửa đổi dễ dàng của câu trả lời này, cái nào làm được điều đó?
Zelphir Kaltstahl

@Zelphir Tôi không chắc bạn đang theo đuổi điều gì: năm ô còn lại là biểu đồ trống không có dữ liệu, vì vậy tôi không chắc bạn đang yêu cầu thêm gì. Ngoài ra, đây là một câu hỏi mới. Trong tương lai, vui lòng đặt câu hỏi này như một câu hỏi mới hơn là bình luận về một câu trả lời cũ.
Chris

26

Một giao diện subplot được cải thiện nhiều đã được thêm vào matplotlib kể từ khi câu hỏi này được hỏi lần đầu tiên. Tại đây bạn có thể tạo chính xác các tình huống phụ mà bạn cần mà không cần ẩn các tính năng bổ sung. Ngoài ra, các ô con có thể kéo dài các hàng hoặc cột bổ sung.

import pylab as plt

ax1 = plt.subplot2grid((3,2),(0, 0))
ax2 = plt.subplot2grid((3,2),(0, 1))
ax3 = plt.subplot2grid((3,2),(1, 0))
ax4 = plt.subplot2grid((3,2),(1, 1))
ax5 = plt.subplot2grid((3,2),(2, 0))

plt.show()

nhập mô tả hình ảnh ở đây


Chà - đó là một cải tiến tốt. Đơn giản hơn rất nhiều! Cảm ơn @Hooked!
mishaF

@ Nhìn kìa, khoảng trống cuối cùng đó rất lý tưởng để thêm chú giải. Bạn có biết cách nào để đặt huyền thoại ở đó không?
Stefano

@Stefano chắc chắn có nhiều cách để làm điều này - nhưng điều này tốt nhất nên được đặt dưới dạng một câu hỏi mới, bạn thậm chí có thể liên kết câu trả lời này trong câu hỏi của mình (chào mừng bạn đến với StackOverflow btw!)
Hooked vào

6

Cũng có thể ẩn một subplot bằng phương thức Axes.set_visible ().

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure()
data = pd.read_csv('sampledata.csv')

for i in range(0,6):
ax = fig.add_subplot(3,2,i+1)
ax.plot(range(1,6), data[i])
if i == 5:
    ax.set_visible(False)

Câu trả lời của bạn là tuyệt vời cho cả Axes gốc và GeoAxes mở rộng!
Fei Yao

1

Nó có phải là một tùy chọn để tạo các lô phụ khi bạn cần chúng không?

import matplotlib
matplotlib.use("pdf")
import matplotlib.pyplot as plt

plt.figure()
plt.gcf().add_subplot(421)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(422)
plt.fill([0,0,1,1],[0,1,1,0])
plt.gcf().add_subplot(423)
plt.fill([0,0,1,1],[0,1,1,0])
plt.suptitle("Figure Title")
plt.gcf().subplots_adjust(hspace=0.5,wspace=0.5)
plt.savefig("outfig")

Tôi không nghĩ vậy vì có những thứ định dạng khác tôi cần làm mà tôi không đưa vào câu hỏi ban đầu cho ngắn gọn. Một trong số này là plt.subplots_adjust (wspace = 0, hspace = 0). Tôi không chắc điều đó sẽ hoạt động sau khi thực tế.
mishaF

@mishaF: bạn có thể thực hiện subplots_adjust () bằng cách sử dụng phương pháp này. Xem bản chỉnh sửa của tôi.
moooeeeep
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.