Как изменить цвет линии на графике линейной регрессии Seaborn

Как описано в морском API, следующий код создаст график линейной регрессии.

import numpy as np, pandas as pd; np.random.seed(0)
import seaborn as sns; sns.set(style="white", color_codes=True)
tips = sns.load_dataset("tips")
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg')
sns.plt.show()

Однако с большим количеством точек данных линия регрессии больше не видна. Как я могу изменить его цвет? Я не смог найти встроенную команду seaborn.

В случае, если линия находится на заднем плане (то есть за точками), я также хотел бы спросить, как вывести ее на передний план.


person n1000    schedule 22.07.2015    source источник
comment
Если бы Сиборн вернул артистов, это было бы очень просто. Лучшее, что вы можете сделать, если в функциональном API нет ручки, это посмотреть на g.lines, чтобы попытаться угадать, какой исполнитель находится в строке регрессии, а затем выполнить ln.set_color('k').   -  person tacaswell    schedule 22.07.2015
comment
@tcaswell Спасибо за подсказку! К сожалению AttributeError: 'JointGrid' object has no attribute 'lines'   -  person n1000    schedule 22.07.2015


Ответы (1)


Есть пара подходов, как тактично заметил mwaskom. Вы можете передавать аргументы в совместный график, но установка color влияет на всю диаграмму рассеяния:

import numpy as np, pandas as pd; np.random.seed(0)
import seaborn as sns#; sns.set(style="white", color_codes=True)
tips = sns.load_dataset("tips")
g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg',
                  joint_kws={'color':'green'}) # Scatter and regression all green

введите здесь описание изображения

Или пропустите словарь ключевых слов линейного построения через этот словарь ключевых слов диаграммы рассеяния. Я прочитал seaborn/linearmodels.py, чтобы понять, где это сделать, что само по себе было интересно и познавательно. Дикт в дикт:

g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg',
                  joint_kws={'line_kws':{'color':'cyan'}}) # Only regression cyan

введите здесь описание изображения

Или вы можете получить доступ к линии после того, как она была построена, и изменить ее напрямую. Это зависит от того, что линия регрессии является первой построенной линией, поэтому может нарушиться при морских обновлениях. Это также отличается эстетически/педагогически, поскольку вы не перекрашиваете распространение неопределенности. Это хороший способ познакомиться с тем, что такое объект JointGrid и как еще вы можете с ним взаимодействовать. (И, возможно, есть свойства, которые вы не можете установить с помощью аргументов вызова функции, хотя я не могу придумать ни одного.)

g = sns.jointplot(x="total_bill", y="tip", data=tips, kind='reg')
regline = g.ax_joint.get_lines()[0]
regline.set_color('red')
regline.set_zorder(5)

введите здесь описание изображения

person cphlewis    schedule 22.07.2015
comment
Это работает, но было бы лучше просто передать цвет на график с помощью опции joint_kws. - person mwaskom; 24.07.2015
comment
Я думаю, это все способы, @mwaskom. Что-то еще документировать? :) - person cphlewis; 25.07.2015
comment
Как я могу получить этот вывод, используя новейшую версию Seaborn? - person seralouk; 31.01.2021
comment
Теперь работает с Seaborn 0.11.1; единственное изменение было в последнем варианте с красной линией. - person cphlewis; 06.02.2021
comment
Почему он не показывает мне значения pearsonr и p? - person Mehdi Abbassi; 19.07.2021
comment
Раньше Seaborn делал это автоматически, но больше не делает этого, @Mehdi Abassi. (Спасибо, что указали на это; я обновил графику.) Похоже, что лучше всего использовать рассчитать коэффициенты, используя статистические функции, и самостоятельно добавить текстовую строку. - person cphlewis; 20.07.2021