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,然后两个表放入一个和情节,使用热图.但是,我需要帮助解决以下问题:
对上述问题的任何帮助都会非常有帮助.
注意:我并不像上面提到的那样,甚至不使用热图来表示数据.如果还有其他绘图建议,请告诉我.
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)
希望这就是您的第二个想法。请注意,这仅当您具有相同的列名时才有效。