2015-04-12 15 views
5

Tôi đang cố tạo một hình ảnh duy nhất với các bản đồ nhiệt đại diện cho sự tương quan của các điểm dữ liệu cho mỗi nhãn riêng biệt. Với sanh ở biển tôi có thể tạo ra một bản đồ nhiệt cho một lớp duy nhất như vậyVẽ các bản đồ tương quan với Seaborn FacetGrid

grouped = df.groupby('target') 
sns.heatmap(grouped.get_group('Class_1').corr()) 

An Tôi có được điều này có ý nghĩa:

Class_1 correlation heatmap

Nhưng sau đó tôi cố gắng tạo ra một danh sách của tất cả các nhãn như vậy:

g = sns.FacetGrid(df, col='target') 
g.map(lambda grp: sns.heatmap(grp.corr())) 

Và thật đáng buồn tôi có được điều này mà làm cho không có ý nghĩa với tôi:

Failing attempt to plot all classes

+0

Bạn muốn chín bản đồ nhiệt, mỗi bản đồ có hiển thị mối tương quan trong một mục tiêu không? – cphlewis

+0

Vâng, tôi chấp nhận câu trả lời của @cphlewis vì nó hoạt động nhưng những gì tôi thích về seaborn cho đến nay là bạn có thể vẽ đồ nhanh và bẩn, theo nghĩa bạn có thể nói với nó là "vẽ đồ này" và nó sẽ xuất hiện một cái gì đó. Usecase của tôi là khá nhiều rằng: nó không phải là rất quan trọng với tôi như thế nào heatmaps sẽ được sắp xếp hoặc những gì trục sẽ được hiển thị, chỉ để xem thông tin đó trong khá nhiều các định dạng tôi yêu cầu. Vì vậy, nhận được điều lambda để làm việc sẽ rất hữu ích :) – fakedrake

+0

Vâng tôi vội vã nó và không chạm vào nút đúng thanx :) – fakedrake

Trả lời

5

Hóa ra bạn có thể làm điều đó khá đơn giản chỉ với bẩm sinh nếu bạn sử dụng map_dataframe thay vì map.

g = sns.FacetGrid(df, col='target') 
g.map_dataframe(lambda data, color: sns.heatmap(data.corr(), linewidths=0)) 

@mwaskom chỉ ra trong bình luận của ông rằng nó có thể là một ý tưởng tốt để thiết lập một cách rõ ràng những giới hạn của bản đồ màu để các khía cạnh khác nhau có thể được trực tiếp hơn so sánh. Các documentation mô tả heatmap thông số liên quan:

Vmin, vmax: phao, bắt buộc

Values ​​để neo bản đồ màu, nếu không họ được suy ra từ các dữ liệu và đối số từ khóa khác. Khi tập dữ liệu phân tách là phỏng đoán, một trong các giá trị này có thể bị bỏ qua.

4

Without FacetGrid, nhưng thực hiện một Heatmap corr cho từng nhóm trong một cột:

import pandas as pd 
import seaborn as sns 
from numpy.random import randint 
import matplotlib.pyplot as plt 


df = pd.DataFrame(randint(0,10,(200,12)),columns=list('abcdefghijkl')) 
grouped = df.groupby('a') 
rowlength = grouped.ngroups/2 # fix up if odd number of groups 
fig, axs = plt.subplots(figsize=(9,4), nrows=2, ncols=rowlength) 

targets = zip(grouped.groups.keys(), axs.flatten()) 
for i, (key, ax) in enumerate(targets): 
    sns.heatmap(grouped.get_group(key).corr(), ax=ax, 
       xticklabels=(i >= rowlength), 
       yticklabels=(i%rowlength==0), 
       cbar=False) # Use cbar_ax into single side axis 
    ax.set_title('a=%d'%key) 
plt.show() 

enter image description here Có thể có một cách để thiết lập một lambda để vượt qua một cách chính xác các dữ liệu từ các máy phát điện g.facet_data() qua corr trước khi đến heatmap.

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