Python: Установка цвета края полосы ошибки Seaborn - PullRequest
0 голосов
/ 30 октября 2018

Я использую Seaborn для создания линейных графиков с полосой, указывающей стандартные отклонения. Нечто подобное второму / третьему сюжету в документе ниже: https://seaborn.pydata.org/generated/seaborn.lineplot.html?highlight=lineplot#seaborn.lineplot

Мне интересно, возможно ли установить цвет края для полосы ошибок отдельно? Я могу изменить стиль линии группы через err_kws. Но если я пропущу "edgecolor" через err_kws, то, похоже, ничего не произойдет. Есть ли способ, позволяющий мне контролировать края?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Как отмечает Джакубоски, цвет линии и полоса ошибок внутренне связаны вместе в lineplot Морского Рога. Я полагаю, что чище изменять свойства художников после генерации сюжета. Это более чистая альтернатива, чем непосредственное редактирование исходного кода библиотеки (проблемы с обслуживанием и т. Д.)

Для примеров данных, показанных в документах sns.lineplot , мы можем обновить свойства диапазона ошибок следующим образом:

import seaborn as sns
fmri = sns.load_dataset("fmri")
ax = sns.lineplot(x="timepoint", y="signal", data=fmri)

# by inspection we see that the PolyCollection is the first artist
for child in ax.get_children():
    print(type(child))

# and so we can update its properties
ax.get_children()[0].set_color('k')
ax.get_children()[0].set_hatch('//')

polycollection properties modified

Может быть более надежным выбрать по свойству исполнителя, а не по первому исполнителю (особенно, если вы уже отрисовали что-то на тех же осях), например, вдоль этих линий:

from matplotlib.collections import PolyCollection
for child in ax.findobj(PolyCollection):
    child.set_color('k')
    child.set_hatch('//')
0 голосов
/ 30 октября 2018

Похоже, что на самом деле невозможно изменить этот цвет в текущей реализации Seaborn. Это связано с тем, что они явно передают цвет основной линии полосе ошибок как ax.fillbetweenx (... color = original_color). Поэкспериментировав в прошлом, я обнаружил, что этот цветовой аргумент, по-видимому, заменяет другие цветовые аргументы, такие как facecolor и edgecolor, поэтому не имеет значения, что вы вставили туда в err_kws. Однако вы можете исправить это, отредактировав строку 810 в site-packages / seaborn /lational.py из:

ax.fill_between(x, low, high, color=line_color, **err_kws)

до

ax.fill_between(x, low, high, **err_kws)

и передача цветов явно через err_kws.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...