2017-07-19 65 views
1

我想绘制一个来自熊猫数据框的2列数据的热图。但是,我想用第三列标记x轴,理想情况下是通过颜色标记,但另一种方法(如附加轴)也同样适用。我的数据帧是:具有特定轴标签颜色的热图

MUT SAMPLE VAR    GROUP 
    True s1  1_1334442_T  CC002 
    True s2  1_1334442_T  CC006 
    True s1  1_1480354_GAC CC002 
    True s2  1_1480355_C  CC006 
    True s2  1_1653038_C  CC006 
    True s3  1_1730932_G  CC002 

...

只给数据的一个更好的想法;有9种不同类型的'组',约6万种'VAR'和540'SAMPLE's。我不知道这是建立在python热图的最佳方式,但这里是我想通了,至今:

pivot = pd.crosstab(df_all['VAR'],df_all['SAMPLE']) 
sns.set(font_scale=0.4) 
g = sns.clustermap(pivot, row_cluster=False, yticklabels=False, linewidths=0.1, cmap="YlGnBu", cbar=False) 
plt.show() 

我不知道怎么去“集团”沿x轴显示,作为附加轴还是只着色轴标签?任何帮助将非常感激。

我不确定'MUT'列是否是一个布尔变量是一个问题,df_all在每个'VAR'上都是'TRUE',但是随着枢轴的进行,任何没有特定'VAR '填充为0,其他填充为1.我的目标是尝试对具有类似'VAR'配置文件的样本进行聚类。我希望这有帮助。

请让我知道,如果我可以进一步澄清?非常感谢

回答

2

看看这个例子。您可以给clustermap函数提供一个列表或一个数据帧列。通过指定col_colors参数或row_colors参数,您可以根据该列表为行或列指定颜色。

在下面的示例中,我使用了虹膜数据集并制作了一个pandas系列对象,用于指定特定行应具有的颜色。该熊猫系列作为row_colors的参数。

iris = sns.load_dataset("iris") 
species = iris.pop("species") 
lut = dict(zip(species.unique(), "rbg")) 
row_colors = species.map(lut) 
g = sns.clustermap(iris, row_colors=row_colors,row_cluster=False) 

此代码的结果如下图片。

您可能需要稍微调整一下,以便还包括组的着色图例。

enter image description here

+0

这有助于了解这可以做到。然而,我的df的结构与虹膜不同,因为我已经制作了原始df的2列的数据透视表和交叉表,并且正在绘制基于此输出的热图。我需要重新添加'GROUP'的另一列来使我的df等价于虹膜。我正在努力使用熊猫方法来做到这一点。我可以启动一个新列,然后迭代df,并为每一行添加哪个'GROUP'到新列,但它看起来非常麻烦 - 你知道熊猫的方法吗? – user3062260