我们怎样才能获得seaborn FacetGrid
热图的传说?该.add_legend()
方法对我不起作用.
使用上一个问题中的代码:
import pandas as pd import numpy as np import itertools import seaborn as sns print("seaborn version {}".format(sns.__version__)) # R expand.grid() function in Python # /sf/ask/17360801/ def expandgrid(*itrs): product = list(itertools.product(*itrs)) return {'Var{}'.format(i+1):[x[i] for x in product] for i in range(len(itrs))} methods=['method 1', 'method2', 'method 3', 'method 4'] times = range(0,100,10) data = pd.DataFrame(expandgrid(methods, times, times)) data.columns = ['method', 'dtsi','rtsi'] data['nw_score'] = np.random.sample(data.shape[0]) def facet(data,color): data = data.pivot(index="dtsi", columns='rtsi', values='nw_score') g = sns.heatmap(data, cmap='Blues', cbar=False) with sns.plotting_context(font_scale=5.5): g = sns.FacetGrid(data, col="method", col_wrap=2, size=3, aspect=1) g = g.map_dataframe(facet) g.add_legend() g.set_titles(col_template="{col_name}", fontweight='bold', fontsize=18)
你想要的(在matplotlib术语中)是一个颜色条,而不是一个图例.在matplotlib中,前者用于连续数据,而后者用于分类数据.Colorbar支持不是内置的FacetGrid
,但是扩展示例代码以添加颜色条并不困难:
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]) def facet_heatmap(data, color, **kws): data = data.pivot(index="dtsi", columns='rtsi', values='nw_score') sns.heatmap(data, cmap='Blues', **kws) # <-- Pass kwargs to heatmap with sns.plotting_context(font_scale=5.5): g = sns.FacetGrid(data, col="method", col_wrap=2, size=3, aspect=1) cbar_ax = g.fig.add_axes([.92, .3, .02, .4]) # <-- Create a colorbar axes g = g.map_dataframe(facet_heatmap, cbar_ax=cbar_ax, vmin=0, vmax=1) # <-- Specify the colorbar axes and limits g.set_titles(col_template="{col_name}", fontweight='bold', fontsize=18) g.fig.subplots_adjust(right=.9) # <-- Add space so the colorbar doesn't overlap the plot
我已经指出了我所做的更改以及它们作为内联注释的基本原理.