У меня есть следующая проблема. Если я хочу построить линейную диаграмму, не используя какой-либо стиль с цветовой схемой, это отлично работает. Однако, как только я применяю стиль, цветовая палитра не подбирается.
Позвольте сделать пример:
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()
Этот график генерирует правильную цветовую схему:
Однако при использовании параметра стиля
df.plot(colormap=my_cmap, alpha=0.8, rot=0, xticks=df.index, linewidth=2, style=['o-', 's:'])
plt.show()
он как-то переопределяет это:
Как я могу использовать стиль с желаемой цветовой палитрой?
Глядя на исходный код, цвета из цветовой карты применяются только тогда, когда не задан стиль.
Я не знаю, есть ли решение, доступное внутри оболочки 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()