python - 如何在 Seaborn 中轻松平滑热图绘图?

标签 python seaborn heatmap smoothing

我想知道是否有任何选项可以制作以下图片,这些图片是 sns.heatmap(df) subplots smooth 的输出: img 我刚找到一个相关答案 here这是通过使用 zsmooth 建议的:

data = [go.Heatmap(z=[[1, 20, 30],
                      [20, 1, 60],
                      [30, 60, 1]],
                   zsmooth = 'best')]
iplot(data)

我使用 seaborn 的代码片段如下:

#plotting all columns ['A','B','C'] in-one-window side by side
fig, axes = plt.subplots(nrows=1, ncols=3 , figsize=(20,10))

plt.subplot(131)
sns.heatmap(df1, vmin=-1, vmax=1, cmap ="coolwarm", linewidths=.75 , linecolor='black', cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[MPa]', size=20) #cbar_kws={'label': 'Celsius'}
plt.title('A', fontsize=12, color='black', loc='center', style='italic')
plt.axis('off')

plt.subplot(132)
sns.heatmap(df2, vmin=-1, vmax=1, cmap ="coolwarm", linewidths=.75 , linecolor='black', cbar=True , cbar_kws={"ticks":[-1.0,-0.75,-0.5,-0.25,0.00,0.25,0.5,0.75,1.0]})
fig.axes[-1].set_ylabel('[Mpa]', size=20) #cbar_kws={'label': 'Celsius'}
plt.title('B', fontsize=12, color='black', loc='center', style='italic')
plt.axis('off')

plt.subplot(133)
sns.heatmap(df3, vmin=-40, vmax=150, cmap ="coolwarm" , linewidths=.75 , linecolor='black', cbar=True , cbar_kws={"ticks":[-40,150,-20,0,25,50,75,100,125]}) 
plt.title('C', fontsize=12, color='black', loc='center', style='italic')
plt.axis('off')


plt.suptitle(f'Analysis of data in cycle Nr.: {count}', color='yellow', backgroundcolor='black', fontsize=48, fontweight='bold')
plt.subplots_adjust(top=0.7, bottom=0.3, left=0.05, right=0.95, hspace=0.2, wspace=0.2)
plt.savefig(f'{i}/{i}{i}{count}.png') 
plt.show()

问题 是我不确定我是否可以使用它,因为它会调用以下库,而我的是另一个库。如果有人向我解释是否可行以及我如何在我的代码片段中实现它,那就太好了?

from plotly.offline import download_plotlyjs, init_notebook_mode, plot
import plotly.graph_objs as go

最佳答案

您链接的问题巧妙地使用了。如果您不想使用它并且只想平滑数据的外观,我建议您使用 scipy 使用高斯滤波器。

在顶部,导入

from scipy.ndimage.filters import gaussian_filter

然后像这样使用它:

df3_smooth = gaussian_filter(df3, sigma=1)
sns.heatmap(df3_smooth, vmin=-40, vmax=150, cmap ="coolwarm" , cbar=True , cbar_kws={"ticks":[-40,150,-20,0,25,50,75,100,125]}) 

您可以更改平滑量,例如使用sigma=3,或任何其他可提供所需平滑量的数字。

请记住,这也会“消除”您拥有的任何最大数据峰值,因此您的最小和最大数据将不再与您在规范化中指定的相同。为了仍然获得好看的热图,我建议不要为您的 vminvmax 使用固定值,但是:

sns.heatmap(df3_smooth, vmin=np.min(df3_smooth), vmax=np.max(df3_smooth), cmap ="coolwarm" , cbar=True , cbar_kws={"ticks":[-40,150,-20,0,25,50,75,100,125]}) 

关于python - 如何在 Seaborn 中轻松平滑热图绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54333924/

相关文章:

python - 检查 websocket 客户端的 URL - python

r - 在 R 中创建热图?

python - 更改 seaborn 热图颜色条上的刻度大小

r - r 中某些值的具有自己颜色的热图图

python - 使用 pandas 查找时间序列数据中缺失的分钟数据

python - networkx 最佳实践在遍历边缘时获取边缘属性值

Python - 获取字符串之间的差异

python - 在 seaborn 中使用 distplot 进行 FutureWarning

python - Seaborn 热图中的自定义调色板

python - Seaborn 分组条形图,使用总值而不是平均值