Почему colomap не применяется, когда я использую стиль на графике панд?

1

У меня есть следующая проблема. Если я хочу построить линейную диаграмму, не используя какой-либо стиль с цветовой схемой, это отлично работает. Однако, как только я применяю стиль, цветовая палитра не подбирается.

Позвольте сделать пример:

import pandas as pd
import seaborn as sns
from matplotlib.colors import ListedColormap
import matplotlib.pyplot as plt

plt.style.use('ggplot')
df = pd.DataFrame(data=[[100, 100],[105, 110],[107, 118],[112, 110]])
my_cmap = ListedColormap(sns.color_palette("GnBu_d", len(df.columns)).as_hex())

df.plot(colormap=my_cmap, alpha=0.8, rot=0, xticks=df.index, linewidth=2)
plt.show()

Этот график генерирует правильную цветовую схему:

Изображение 174551

Однако при использовании параметра стиля

df.plot(colormap=my_cmap, alpha=0.8, rot=0, xticks=df.index, linewidth=2, style=['o-', 's:'])
plt.show()

он как-то переопределяет это:

Изображение 174551

Как я могу использовать стиль с желаемой цветовой палитрой?

  • 0
    Этот метод применяет цвета из цветовой карты только тогда, когда стиль не указан. Итак, по-видимому, это предназначено.
  • 0
    @ImportanceOfBeingErnest Есть ли вокруг этого?
Показать ещё 1 комментарий
Теги:
pandas
matplotlib
seaborn

1 ответ

1
Лучший ответ

Глядя на исходный код, цвета из цветовой карты применяются только тогда, когда не задан стиль.

Я не знаю, есть ли решение, доступное внутри оболочки pandas. Обходным решением было бы временно установить другой цветной циклик при построении графика. В оболочке Pandas будет использоваться цветовой цикл matplotlib, так что следующее приведет к желаемому результату.

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

plt.style.use('ggplot')
df = pd.DataFrame(data=[[100, 100],[105, 110],[107, 118],[112, 110]])

cc = plt.cycler("color", sns.color_palette("GnBu_d", len(df.columns)))
with plt.style.context({"axes.prop_cycle" : cc}):
    df.plot(alpha=0.8, rot=0, xticks=df.index, linewidth=2, style=['o-', 's:'])
plt.show()

Изображение 174551

Ещё вопросы

Сообщество Overcoder
Наверх
Меню