Điền vào giữa hai dòng dọc trong matplotlib


95

Tôi đã xem qua các ví dụ trong matplotlibtài liệu, nhưng tôi không rõ bằng cách nào tôi có thể tạo một biểu đồ lấp đầy diện tích giữa hai đường thẳng đứng cụ thể.

Ví dụ: giả sử tôi muốn tạo một cốt truyện giữa x=0.2x=4(cho toàn bộ yphạm vi của cốt truyện). Tôi có nên sử dụng fill_between, fillhoặc fill_betweenx?

Tôi có thể sử dụng wheređiều kiện cho việc này không?

Câu trả lời:


191

Nó giống như bạn muốn axvspan, chứ không phải là một trong những điền giữa các chức năng. Sự khác biệt là axvspan(và axhspan) sẽ lấp đầy toàn bộ phạm vi y (hoặc x) của âm mưu bất kể bạn thu phóng như thế nào.

Ví dụ: hãy sử dụng axvspanđể đánh dấu vùng x từ 8 đến 14:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, alpha=0.5, color='red')

plt.show()

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

Bạn có thể sử dụng fill_betweenxđể làm điều này, nhưng phạm vi (cả x và y) của hình chữ nhật sẽ nằm trong tọa độ dữ liệu . Với axvspan, các khoảng y của hình chữ nhật được mặc định là 0 và 1 và nằm trong các trục tọa độ (nói cách khác là tỷ lệ phần trăm chiều cao của ô).

Để minh họa điều này, hãy làm cho hình chữ nhật mở rộng từ 10% đến 90% chiều cao (thay vì chiếm toàn bộ). Hãy thử thu phóng hoặc xoay và nhận thấy rằng các khoảng cách y cho biết cố định trong không gian hiển thị, trong khi các khoảng cách x di chuyển với thu phóng / xoay:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot(range(20))
ax.axvspan(8, 14, ymin=0.1, ymax=0.9, alpha=0.5, color='red')

plt.show()

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


3
những người đang quan tâm đến một giải pháp cho sử dụng fill_betweenđể biết thêm "Wiggly", đường dây thẳng đứng, có một cái nhìn tại các transformtham số (và câu trả lời này )
Ông Tsjolder
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.