Matplotlib nâng cao

Hai trục y với twinx

Vẽ hai đại lượng khác đơn vị trên cùng một biểu đồ bằng trục y thứ hai tạo từ ax.twinx.

Giới thiệu

Lượng mưa tính bằng milimét và nhiệt độ tính bằng độ không dùng chung một thang đo được: trên một trục, một trong hai sẽ trông như đường phẳng. ax.twinx tạo một Axes thứ hai dùng chung trục x nhưng có trục y riêng ở bên phải.

ax1 vẽ các cột lượng mưa với trục y bên trái. ax2 = ax1.twinx() dùng chung các tháng nhưng có trục y mới bên phải cho nhiệt độ. Tô màu nhãn trục giống màu dữ liệu giúp người xem biết trục nào thuộc chuỗi nào. Đừng lạm dụng hai trục: người xem dễ hiểu sai khi so sánh hai chuỗi với nhau.

Trình mô phỏng tương tác

Tắt trục y thứ hai để thấy vì sao nó cần thiết: khi dùng chung một thang đo, đường nhiệt độ bị dẹt sát đáy.

Ví dụ Matplotlib chạy được

Matplotlib
Chạy code →
main.py
import matplotlib.pyplot as plt

months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
temperature = [3, 5, 9, 14, 18, 22, 25, 24, 20, 14, 8, 4]
rain = [60, 50, 55, 45, 60, 70, 80, 85, 60, 75, 80, 70]

fig, ax1 = plt.subplots(figsize=(7, 4))
ax1.bar(months, rain, color="tab:blue", alpha=0.4)
ax1.set_ylabel("Rain (mm)", color="tab:blue")

ax2 = ax1.twinx()
ax2.plot(months, temperature, color="tab:red", marker="o")
ax2.set_ylabel("Temperature (°C)", color="tab:red")
ax1.set_title("Climate in one chart")
plt.show()
Lấy nút Run cho ví dụ này Biểu đồ mà đoạn code này vẽ ra
Hai trục y với twinx