Мой первый подход будет основан на фигуре с несколькими сюжетами.Количество графиков будет равно количеству столбцов в вашем фрейме данных;разрыв между участками может быть уменьшен до нуля:
cm = ['Blues', 'Reds', 'Greens', 'Oranges', 'Purples', 'bone', 'winter']
f, axs = plt.subplots(1, df.columns.size, gridspec_kw={'wspace': 0})
for i, (s, a, c) in enumerate(zip(df.columns, axs, cm)):
sns.heatmap(np.array([df[s].values]).T, yticklabels=df.index, xticklabels=[s], annot=True, fmt='.2f', ax=a, cmap=c, cbar=False)
if i>0:
a.yaxis.set_ticks([])
Результат:
Не уверен, приведет ли это к полезным или даже к себеописание визуализации данных, но это ваш выбор - возможно, это поможет начать ...
Дополнительно:
Что касается добавления цветовых полос: конечно, вы можете,Но - помимо того, что я не знаю основы ваших данных и цели визуализации - я хотел бы добавить несколько соображений по поводу всего этого:
Первый : добавление всех этих цветовых полос в качестве отдельноговозможно, возможно несколько столбцов на одной стороне или ниже тепловой карты, но я нахожу, что уже довольно сложно читать данные, плюс: у вас уже есть все эти аннотации - я думаю, что это все испортит.
Дополнительно: вМежду тем @ImportanceOfBeingErnest предоставил такое прекрасное решение по этой теме, что здесь это не будет слишком значимым для меня.
Секунда : если вы действительно хотите придерживаться принципа тепловой карты, возможно, расщепленияи присвоение каждому столбцу его цветовой шкалы подойдет лучше:
cm = ['Blues', 'Reds', 'Greens', 'Oranges', 'Purples', 'bone', 'winter']
f, axs = plt.subplots(1, df.columns.size, figsize=(10, 3))
for i, (s, a, c) in enumerate(zip(df.columns, axs, cm)):
sns.heatmap(np.array([df[s].values]).T, yticklabels=df.index, xticklabels=[s], annot=True, fmt='.2f', ax=a, cmap=c)
if i>0:
a.yaxis.set_ticks([])
f.tight_layout()
Однако все, что сказано - осмелюсь усомнитьсячто это лучшая визуализация для ваших данных.Конечно, я не знаю, что вы хотите сказать, увидеть или найти на этих графиках, но в этом суть: если тип визуализации будет соответствовать потребностям, я думаю, я бы знал (или, по крайней мере, мог бы вообразить).
Например:
Простое df.plot()
приводит к
, и я чувствую, что это говорит о разныххарактеристики ваших столбцов в течение нескольких десятых секунды, чем тепловая карта.
Или вы явно после разницы в средствах каждого столбца?
(df - df.mean()).plot()
... или распределение каждого столбца вокруг них?
(df - df.mean()).boxplot()
Что я хочу сказать: данныеВизуализация становится мощной, когда сюжет начинает рассказывать о базовых данных, прежде чем вы начнете / должны что-то объяснять ...