Python 如何在Seaborn中轻松平滑热图图?

Python 如何在Seaborn中轻松平滑热图图?,python,seaborn,heatmap,smoothing,Python,Seaborn,Heatmap,Smoothing,我想知道是否有任何选项可以制作以下图片,这些图片是sns.heatmap(df)subplotsmoothy的输出: 我刚刚找到了一个相关的答案,使用zsmooth: data = [go.Heatmap(z=[[1, 20, 30], [20, 1, 60], [30, 60, 1]], zsmooth = 'best')] iplot(data) 我使用的代码片段如

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

data = [go.Heatmap(z=[[1, 20, 30],
                      [20, 1, 60],
                      [30, 60, 1]],
                   zsmooth = 'best')]
iplot(data)
我使用的代码片段如下所示:

#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
,或提供所需平滑量的任何其他数字来更改平滑量

请记住,这也将“平滑”所有最大数据峰值,因此您的最小和最大数据将不再与您在规范化中指定的相同。为了得到好看的热图,我建议不要对
vmin
vmax
使用固定值,但是:

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]}) 

你提到的第二个选项工作得很好,我对你清晰的答案感到惊讶,但是我注意到最好使用
sigma=1
,因为在较高的sigma
sigma=2
sigma=3
中,我丢失了细节!另一个问题是,在应用超级规范化之后,我仍然作为一个问题分享,当我检查数据集中的规范化数据时,仍然有大约4500个周期,仍然有一些数据未进行规范化,我想每隔一段时间将它们包括到端点。有什么想法吗?你知道,考虑到在高斯归一化过程中,我将te数据限制在置信区间(CI)内,我仍然面临一些数据泄漏超出预期范围的情况,但由于数据的分布和积累不好,我似乎需要重新缩放它们。有什么优雅的方法可以做到这一点吗?或者我应该使用
df['A']=scaler.fit_变换(data_to_use1.resporate(-1,1))
df['C']=scaler.fit_变换(data_to_use1.resporate(-40150))
通过使用sklearn import preprocessing中的
?如果是这样的话,我应该在脚本中应用什么来修复这个庞大数据集的规范化问题?@Mario,您得到的数据超出了“A”/df1的规范化范围,因为在第三个循环中,您正在使用df2/“B”设置df1规范化的最小值和最大值。我认为如果您检查我的下的脚本,这是不对的,也许我们可以清楚地讨论一下。我相信在第三个循环中,每个
df1
df2
df3
都通过各自的最大值和最小值进行了归一化,这些值是根据各自的正负值高斯归一化后,每个
df
正数和负数的平均值设置的。也许我不明白你的观点。那么请在下面的问题中提到哪一行使这种规范化失去控制?@Mario,这是针对中的代码,在df:
循环中为i设置
min_val
max_val
。我还没有看过你另一个问题中的代码。我不确定你的问题范围对stackoverflow来说是否有点过于宽泛。您是否有同事或顾问可以帮助您在编写代码时更加结构化?