结合seaborn的两张热图

Jon*_*han 5 python plot graph matplotlib seaborn

我有2个数据表的尺寸4x25.每个表都来自不同的时间点,但具有完全相同的元数据,实质​​上是相同的列和行标题.

鉴于列数很多,我认为最好heatmap使用seaborn库来表示Python.但是,我需要在同一个图中包含两个表.我能够创建一个表示单个数据表的热图.

df = pd.DataFrame(raw_data)
ax = sns.heatmap(df)
ax.set(yticklabels=labels)
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何将两个数据表组合到同一个热图中.我能想到的唯一的办法是只创建一个新的DataFrame维度4x50,然后两个表放入一个和情节,使用热图.但是,我需要帮助解决以下问题:

  1. 我不确定如何在热图的中间画一条线来区分2个表中的数据.读者看到列开始重复的位置以实现新数据的开始位置是令人讨厌的.
  2. 一个更好的解决办法是申请2组数据的2个不同的着色方案相同的热图,而不是只是简单地画线拦腰.

对上述问题的任何帮助都会非常有帮助.

注意:我并不像上面提到的那样,甚至不使用热图来表示数据.如果还有其他绘图建议,请告诉我.

Imp*_*est 10

在图中并排显示两个seaborn热图的一种可能方式是将它们绘制成单独的子图.可以将子图之间的空间设置为非常小(wspace=0.01)并将相应的颜色条和标记标记定位在该间隙之外.

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

df =  pd.DataFrame(np.random.rand(25,4), columns=list("ABCD"))
df2 = pd.DataFrame(np.random.rand(25,4), columns=list("WXYZ"))

fig, (ax,ax2) = plt.subplots(ncols=2)
fig.subplots_adjust(wspace=0.01)
sns.heatmap(df, cmap="rocket", ax=ax, cbar=False)
fig.colorbar(ax.collections[0], ax=ax,location="left", use_gridspec=False, pad=0.2)
sns.heatmap(df2, cmap="icefire", ax=ax2, cbar=False)
fig.colorbar(ax2.collections[0], ax=ax2,location="right", use_gridspec=False, pad=0.2)
ax2.yaxis.tick_right()
ax2.tick_params(rotation=0)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


小智 10

matplotlib/seaborn 库最好的部分是,所有内容都绘制在同一个图中,直到您清除它为止。您可以使用 mask 参数来sns.heatmap获取对角热图。要获得“混合”热图,以便可以使用不同的颜色图绘制两种不同类型的数据,您可以执行以下操作:

from sklearn.datasets import load_iris
import seaborn as sns
import pandas as pd
import numpy as np

data = load_iris()
df= pd.DataFrame(data.data,columns = data.feature_names)
df['target'] = data.target

df_0 = df[df['target']==0]
df_1 = df[df['target']==1]

df_0.drop('target',axis=1,inplace=True)
df_1.drop('target',axis=1,inplace=True)

matrix_0 = np.triu(df_0.corr())
matrix_1 = np.tril(df_1.corr())

import seaborn as sns
from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable
from mpl_toolkits.axes_grid1.colorbar import colorbar
sns.heatmap(df_0.corr(),annot=True,mask=matrix_0,cmap="BuPu")
sns.heatmap(df_1.corr(),annot=True,mask=matrix_1,cmap="YlGnBu")
Run Code Online (Sandbox Code Playgroud)

希望这就是您的第二个想法。请注意,这仅当您具有相同的列名时才有效。

虹膜数据集的混合热图