2015-02-06 27 views
11

Dưới đây là một ví dụ cho thấy một colorbar cho mỗi âm mưu phụ:Một bản đồ nhiệt về colorbar cho sanh ở biển trong âm mưu phụ

import seaborn as sns 
import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.random((10,10,))) 

fig,axn = plt.subplots(2, 2, sharex=True, sharey=True) 

for ax in axn.flat: 
    sns.heatmap(df, ax=ax) 

enter image description here

Làm thế nào tôi có thể loại bỏ các colorbars cho mỗi âm mưu phụ? Tôi muốn chỉ có một thanh màu được định hướng theo chiều dọc hoặc chiều ngang. Tôi biết tôi có quyền truy cập vào mỗi trục colorbar qua fig.get_axes()[:-4], nhưng làm thế nào tôi có thể xóa nó khỏi hoàn toàn khỏi cốt truyện? Tôi không nghĩ rằng có một tùy chọn để chọn không vẽ thanh màu khi bản đồ nhiệt được gọi.

Trả lời

24

Tham số cbar kiểm soát xem có nên thêm thanh màu hay không và tham số cbar_ax có thể tùy chọn chỉ định trục mà thanh màu sẽ đi. Vì vậy, bạn có thể làm:.

import seaborn as sns 
import matplotlib.pyplot as plt 
import pandas as pd 
import numpy as np 

df = pd.DataFrame(np.random.random((10,10,))) 

fig, axn = plt.subplots(2, 2, sharex=True, sharey=True) 
cbar_ax = fig.add_axes([.91, .3, .03, .4]) 

for i, ax in enumerate(axn.flat): 
    sns.heatmap(df, ax=ax, 
       cbar=i == 0, 
       vmin=0, vmax=1, 
       cbar_ax=None if i else cbar_ax) 

fig.tight_layout(rect=[0, 0, .9, 1]) 

(Bạn sẽ nhận được một cảnh báo về tight_layout ở đây, nhưng nó thực sự là chính xác bởi vì chúng tôi đặt cbar_ax rõ ràng Nếu bạn không thích nhìn thấy những cảnh báo, bạn cũng có thể gọi tight_layout trước khi âm mưu, nhưng nó sẽ không được chặt chẽ).

+0

Giải pháp tuyệt vời. Điều này rất hữu ích. Cảm ơn. – drg

+2

Bạn có chắc chắn rằng điều này cũng sẽ đồng bộ hóa màu sắc? Cách tôi nhìn thấy nó sẽ chỉ vẽ bản đồ màu cho trục đầu tiên, nhưng bản đồ màu sẽ không nhất thiết phải tương thích với các trục khác. – bayer

+3

Điểm tốt. Bạn sẽ muốn chỉ định 'vmin' và' vmax' – mwaskom

Các vấn đề liên quan