Để tô màu riêng cho phần giao nhau của hai hình tròn (hoặc patches) trong Matplotlib, bạn có thể kết hợp thư viện Shapely và Descartes:
- Thiết lập kích thước hình vẽ và khoảng đệm.
- Tạo hai điểm a và b làm tâm hình tròn.
- Tạo buffer (vùng đệm) quanh mỗi điểm để thành hình tròn.
- Tính toán các vùng: left (chỉ a), right (chỉ b), middle (giao nhau).
- Lấy trục hiện tại bằng gca().
- Thêm các patch với màu sắc khác nhau cho từng vùng.
- Đặt giới hạn trục, tỷ lệ khung hình bằng nhau và ẩn trục.
- Hiển thị hình vẽ.
Ví dụ minh họa
import shapely.geometry as sg
import matplotlib.pyplot as plt
import descartes
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
a = sg.Point(-.5, 0).buffer(1.)
b = sg.Point(0.5, 0).buffer(1.)
left = a.difference(b)
right = b.difference(a)
middle = a.intersection(b)
ax = plt.gca()
ax.add_patch(descartes.PolygonPatch(left, fc='b', ec='k'))
ax.add_patch(descartes.PolygonPatch(right, fc='r', ec='k'))
ax.add_patch(descartes.PolygonPatch(middle, fc='g', ec='k'))
ax.set_xlim(-2, 2)
ax.set_ylim(-2, 2)
ax.set_aspect('equal')
ax.axis('off')
plt.show()
Kết quả đầu ra
