缺少行的Seaborn FacetGrid热图

时间:2016-06-20 21:05:53

标签: python matplotlib heatmap seaborn facet

我正在尝试创建一个热图的FacetGrid,我注意到如果最后一个热图缺少一行中的所有数据,那么所有的图都会被截断。如果任何其他热图都没有发生这种情况。

根据问题“在seaborn FacetGrid热图图中获取传奇”的代码(我无法链接,因为我没有足够的声誉来包含2个以上的链接),

import pandas as pd
import numpy as np
import itertools
import seaborn as sns

methods=['method 1', 'method2', 'method 3', 'method 4']
times = range(0, 100, 10)
data = pd.DataFrame(list(itertools.product(methods, times, times)))
data.columns = ['method', 'dtsi','rtsi']
data['nw_score'] = np.random.sample(data.shape[0])

data = data.iloc[10:]

def facet_heatmap(data, color, **kws):
    data = data.pivot(index="dtsi", columns='rtsi', values='nw_score')
    sns.heatmap(data, cmap='Blues', **kws)

g = sns.FacetGrid(data, col="method", col_wrap=2, size=3, aspect=1)
g = g.map_dataframe(facet_heatmap)

以上绘图正确,第一个图块的第一行被遮盖,灰色显示没有数据:Correct plotting

但是如果我们从最后一个方面删除数据:

data = data.iloc[:-10]
g = sns.FacetGrid(data, col="method", col_wrap=2, size=3, aspect=1)
g = g.map_dataframe(facet_heatmap)  

所有事情都转移了:incorrect plotting。请注意,在此图像中,我们从第一个facet中删除了第一行数据,从最后一个中删除了最后一行,但看起来我们没有丢失数据。

看起来热图正在向上移动?而且标签不再正确(它们应该从10开始,每个地块运行到90,但是最后一个,它们应该从0到80)。

关闭sharexsharey是一种潜在的解决方法:

g = sns.FacetGrid(data, col="method", col_wrap=2, size=3, aspect=1, sharex=False, sharey=False)
g = g.map_dataframe(facet_heatmap) 

这绘制了所有数据,但它很难在各个方面进行比较,并不理想。 (我无法发布链接,因为我没有足够的声誉)。

我提出的另一个解决方案是简单地对列重新排序,以使具有缺失数据的列不是最后一个。但这似乎不是一个好的通用解决方案,在我的具体情况下,我想要使用的列排序导致最终缺少数据的方面。

有没有办法让这项工作?

0 个答案:

没有答案