Nếu mục tiêu chính của bạn là trực quan hóa ma trận tương quan, thay vì tạo ra một âm mưu, thì các pandas
tùy chọn kiểu dáng thuận tiện là một giải pháp tích hợp khả thi:
import pandas as pd
import numpy as np
rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
corr = df.corr()
corr.style.background_gradient(cmap='coolwarm')
# 'RdBu_r' & 'BrBG' are other good diverging colormaps
Lưu ý rằng điều này cần phải có trong phần phụ trợ hỗ trợ kết xuất HTML, chẳng hạn như Notebook JupyterLab. (Văn bản ánh sáng tự động trên nền tối là từ PR hiện có và không phải là phiên bản phát hành mới nhất, pandas
0,23).
Tạo kiểu
Bạn có thể dễ dàng giới hạn độ chính xác của chữ số:
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
Hoặc loại bỏ các chữ số hoàn toàn nếu bạn thích ma trận mà không có chú thích:
corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
Tài liệu về kiểu dáng cũng bao gồm các hướng dẫn về các kiểu nâng cao hơn, chẳng hạn như cách thay đổi hiển thị của ô mà con trỏ chuột đang di chuột qua. Để lưu kết quả đầu ra, bạn có thể trả về HTML bằng cách nối thêm render()
phương thức và sau đó ghi nó vào một tệp (hoặc chỉ chụp ảnh màn hình cho các mục đích ít chính thức hơn).
So sánh thời gian
Trong thử nghiệm của tôi, style.background_gradient()
nhanh hơn gấp 4 lần plt.matshow()
và nhanh hơn 120 lần so sns.heatmap()
với ma trận 10x10. Thật không may, nó không mở rộng quy mô cũng như plt.matshow()
: cả hai mất khoảng thời gian giống nhau cho ma trận 100x100 và plt.matshow()
nhanh hơn gấp 10 lần đối với ma trận 1000x1000.
Tiết kiệm
Có một số cách có thể để lưu khung dữ liệu cách điệu:
- Trả về HTML bằng cách nối thêm
render()
phương thức và sau đó ghi kết quả đầu ra vào một tệp.
- Lưu dưới dạng
.xslx
tệp có định dạng có điều kiện bằng cách nối thêm to_excel()
phương thức.
- Kết hợp với imgkit để lưu một bitmap
- Chụp ảnh màn hình (cho các mục đích ít chính thức hơn).
Cập nhật cho gấu trúc> = 0,24
Bằng cách cài đặt axis=None
, giờ đây có thể tính toán các màu dựa trên toàn bộ ma trận thay vì trên mỗi cột hoặc mỗi hàng:
corr.style.background_gradient(cmap='coolwarm', axis=None)