Как можно легко сгладить графики тепловых карт в Сиборне? - PullRequest
0 голосов
/ 23 января 2019

Мне было интересно, есть ли какие-нибудь варианты сделать следующую картинку, которая является выводом sns.heatmap(df) субплотов smoothy : img Я только что нашел один соответствующий ответ здесь , который предлагается использовать 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

1 Ответ

0 голосов
/ 25 января 2019

Вопрос, который вы связали, использует заговор.Если вы не хотите использовать это и хотите просто сгладить то, как выглядят ваши данные, я предлагаю просто использовать гауссов фильтр с помощью 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]}) 
...