在 Seaborn FacetGrid 中访问当前列和行信息
Access current column and row information in Seaborn FacetGrid
我正在使用 python 中的 seaborn 包绘制热图的 FacetGrid。
现在我想根据此示例中的热图平铺值用阴影覆盖每个热图:
adding hatches to seaborn heatmap plot
我的函数,它定义了一个单元格是否被影线取决于 FacetGrid 的行和列信息
def draw_heatmap(*args, **kwargs):
kwargs.pop('color')
data = kwargs.pop('data')
d = data.pivot(index=args[1], columns=args[0], values=args[2])
d = d.sort_index(ascending=False)
sns.heatmap(d, **kwargs)
d = np.array(
np.meshgrid(np.arange(1, 6, 1),
np.arange(6, 11, 1),
np.arange(1, 6, 1),
np.arange(6, 11, 1))).T.reshape(-1, 4)
d = np.c_[d, np.random.randint(1, 5, 625)]
df = pd.DataFrame(d, columns=['a', 'b', 'c', 'd', 'e'])
fg = sns.FacetGrid(df,
col='b',
row='a',
margin_titles=True,
height=5,
aspect=1)
fg = fg.map_dataframe(draw_heatmap,
'c',
'd',
'e',
cbar=False,
cmap='viridis',
annot=True,
fmt=".0f",
linewidths=.5)
现在,根据 'b', 'a'
和 'values'
的值,其中 'b', 'a'
是 FacetGrid 的行和列,'values'
是数据透视表的值在 draw_heatmap
函数中,我想应用遮罩。
# fgA and fgB are the input values coming from the FacetGrid
hatch = data.stack().to_frame().apply(lambda x: myFunc(fgA, fgB, x.name[0], x.name[1]), axis=1).unstack()
x = np.arange(len(data.columns)+1)
y = np.arange(len(data.index)+1)
zm = np.ma.masked_less(hatch.values, 5)
fig, ax = plt.subplots()
sns.heatmap(w, cmap='viridis', annot=True, fmt=".0f", linewidths=.5, ax=ax)
ax.pcolor(x, y, zm, hatch='//', alpha=0.)
如何在绘制单个热图时实现这一点并访问 FacetGrid 信息?
谢谢
您可以使用 axes
属性获取 FacetGrid 中的轴对象。它是 FacetGrid 中所有轴的数组。
fg.axes[b, a].pcolor(x, y, zm, hatch='//', alpha=0.)
我正在使用 python 中的 seaborn 包绘制热图的 FacetGrid。
现在我想根据此示例中的热图平铺值用阴影覆盖每个热图:
adding hatches to seaborn heatmap plot
我的函数,它定义了一个单元格是否被影线取决于 FacetGrid 的行和列信息
def draw_heatmap(*args, **kwargs):
kwargs.pop('color')
data = kwargs.pop('data')
d = data.pivot(index=args[1], columns=args[0], values=args[2])
d = d.sort_index(ascending=False)
sns.heatmap(d, **kwargs)
d = np.array(
np.meshgrid(np.arange(1, 6, 1),
np.arange(6, 11, 1),
np.arange(1, 6, 1),
np.arange(6, 11, 1))).T.reshape(-1, 4)
d = np.c_[d, np.random.randint(1, 5, 625)]
df = pd.DataFrame(d, columns=['a', 'b', 'c', 'd', 'e'])
fg = sns.FacetGrid(df,
col='b',
row='a',
margin_titles=True,
height=5,
aspect=1)
fg = fg.map_dataframe(draw_heatmap,
'c',
'd',
'e',
cbar=False,
cmap='viridis',
annot=True,
fmt=".0f",
linewidths=.5)
现在,根据 'b', 'a'
和 'values'
的值,其中 'b', 'a'
是 FacetGrid 的行和列,'values'
是数据透视表的值在 draw_heatmap
函数中,我想应用遮罩。
# fgA and fgB are the input values coming from the FacetGrid
hatch = data.stack().to_frame().apply(lambda x: myFunc(fgA, fgB, x.name[0], x.name[1]), axis=1).unstack()
x = np.arange(len(data.columns)+1)
y = np.arange(len(data.index)+1)
zm = np.ma.masked_less(hatch.values, 5)
fig, ax = plt.subplots()
sns.heatmap(w, cmap='viridis', annot=True, fmt=".0f", linewidths=.5, ax=ax)
ax.pcolor(x, y, zm, hatch='//', alpha=0.)
如何在绘制单个热图时实现这一点并访问 FacetGrid 信息?
谢谢
您可以使用 axes
属性获取 FacetGrid 中的轴对象。它是 FacetGrid 中所有轴的数组。
fg.axes[b, a].pcolor(x, y, zm, hatch='//', alpha=0.)