Как я могу различить значения в нижней части спектра цветовой шкалы? (тепловая карта sns) - PullRequest
1 голос
/ 11 февраля 2020

У меня есть кластерная карта sns, описанная ниже.

fig = plt.figure(figsize=(14,10))
sns.clustermap(df2,cmap='icefire', center=18, fmt=".3f", linewidths=0.05, annot=True)

Но у меня есть несколько действительно небольших значений (например, 0,6), которые чуть выше 0 и которые окрашиваются одинаково. Я играл с vmax и vmin, а также использовал расходящуюся карту цветов, но я не могу заставить их выделяться больше, чем они. Будем благодарны за любые предложения.

image

Обновление Я использовал z_score = 0 в качестве параметра для нормализации около 0, похоже, работает хорошо.

1 Ответ

0 голосов
/ 11 февраля 2020

В зависимости от значимости данных и их распределения, вы можете работать с логарифмией c или расходящейся нормой. Параметры могут быть такими:

mport numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
import seaborn as sns

N = 20
df2 = pd.DataFrame({'col1': np.random.uniform(0, 0.6, N) * np.random.choice([1, 50], N),
                    'col2': np.random.uniform(0, 0.6, N) * np.random.choice([1, 50], N),
                    'col3': np.random.uniform(0, 0.6, N) * np.random.choice([1, 50], N)
                    })
norm = mcolors.LogNorm()
#norm = mcolors.DivergingNorm(vmin=0, vcenter=0.6, vmax=30)
sns.clustermap(df2, cmap='icefire', norm=norm,
               center=18, fmt=".3f", linewidths=0.05, annot=True, figsize=(10, 6))

example plot

...