Получение легенды в совместном сюжете Seaborn

Мне интересно использовать совместный сюжет Seaborn для визуализации корреляции между двумя массивами numpy. Мне нравится визуальное различие, которое дает параметр kind='hex', но я также хотел бы знать фактическое количество, которому соответствуют разные оттенки. Кто-нибудь знает, как поставить эту легенду сбоку или даже на сюжет? Пробовал смотреть документацию и не нашел.

Спасибо!


person Vincent    schedule 17.03.2015    source источник
comment
Я тоже искал это, кажется, они еще не реализовали это. Скажи, если найдешь решение.   -  person LearnOPhile    schedule 17.03.2015
comment
Вы должны использовать plt.hexbin напрямую, а затем добавить цветную полосу (что, я полагаю, вы имеете в виду под легендой с plt.colorbar.   -  person mwaskom    schedule 17.03.2015


Ответы (2)


РЕДАКТИРОВАТЬ: обновлено для работы с новой версией Seaborn.

Вам нужно сделать это вручную, создав новую ось с add_axes, а затем передать имя топора plt.colorbar().

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

x = np.random.normal(0.0, 1.0, 1000)
y = np.random.normal(0.0, 1.0, 1000)
hexplot = sns.jointplot(x, y, kind="hex")
plt.subplots_adjust(left=0.2, right=0.8, top=0.8, bottom=0.2)  # shrink fig so cbar is visible
# make new ax object for the cbar
cbar_ax = hexplot.fig.add_axes([.85, .25, .05, .4])  # x, y, width, height
plt.colorbar(cax=cbar_ax)
plt.show()

Hexplot Seaborn с цветной полосой

Источники: я чуть не сдался после того, как прочитал, что разработчик сказал, что

«соотношение работа/выгода [для реализации цветных полос] слишком велико»

но затем я в конце концов нашел это решение в другом выпуске.

person crypdick    schedule 28.04.2015
comment
Кажется, это не работает для меня. Знаете ли вы, какие версии вы использовали (использовали) для этого? - person ryanjdillon; 28.04.2017
comment
@ryanjdillon Я обновил свой ответ полным рабочим примером. Ваша проблема, вероятно, заключалась в том, что цветная полоса отображалась справа от холста, поэтому я добавил строку subplots_adjust(), чтобы обойти эту проблему. (К вашему сведению, tight_layout не совместим с этим объектом Axes, так что это не вариант) - person crypdick; 28.04.2017
comment
Фантастический. Спасибо за такой быстрый ответ!. Я попробую это в понедельник. - person ryanjdillon; 29.04.2017
comment
@ryanjdillon рад помочь, дайте мне знать, если у вас возникнут проблемы - person crypdick; 03.05.2017
comment
@VictorAguiar @Bollenhenk Seaborn отказался от внутреннего plt, я обновил свой ответ, чтобы работать с новой версией. Ваше здоровье. - person crypdick; 19.10.2018
comment
Хорошо знать. Спасибо, @crypdick - person Victor Aguiar; 07.04.2019
comment
Как я могу добавить заголовок поверх этой фигуры? plt.title помещает действительно в неправильное положение - person seralouk; 12.11.2019
comment
@makis попробуй suptitle - person crypdick; 12.11.2019

У меня сработало следующее:

t1 = sns.jointplot(data=df, x="originalestimate_hours", y="working_hours_per_day_created_target", hue="status")
t1.ax_joint.legend_._visible=False
t1.fig.legend(bbox_to_anchor=(1, 1), loc=2)
person Ryan Susman    schedule 27.04.2021