Настройте цвета столбцов для красного (отрицательного) и зеленого (положительного) цветов с помощью pandas.Dataframe.plot - PullRequest
1 голос
/ 17 июня 2019

Я визуализирую% в годовом исчислении изменения для нескольких брендов, используя pd.DataFrame.plot ().Я не уверен, как получить доступ к каждому отдельному участку и установить значения> = 0 зеленого цвета и <0 красного цвета.Я хотел бы избежать разделения кода на рис.Интересно, есть ли способ включить его в параметры df.plot ().</p>

data= {'A': [np.nan, -0.5, 0.5], 
       'B': [np.nan, 0.3, -0.3],
       'C': [np.nan, -0.7, 0.7],
       'D': [np.nan, -0.1, 1]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])`
df.plot(kind='bar', subplots=True, sharey=True, layout=(2,2), legend=False,
        grid=False, colormap='RdBu')

Я пытался использовать цветовую карту, но она не устанавливает отдельные полосы в разные цвета, но каждый подзаговор.Я уверен, что что-то упустил.Любая помощь приветствуется.

Пример 2x2 участков

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Решено следующим образом

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

fig, axes = plt.subplots(nrows=2, ncols=2, sharey=True)

data= {'A': [np.nan, -0.5, 0.5], 
       'B': [np.nan, 0.3, -0.3],
       'C': [np.nan, -0.7, 0.7],
       'D': [np.nan, -1, 1]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])

for i, col in enumerate(df.columns):
     df[col].plot(kind='bar', color=(df[col] > 0).map({True: 'g', False: 'r'}), 
     ax=axes[i // 2][i % 2], sharex=True, sharey=True, grid=False)
axes[i // 2][i % 2].set_title(col)
plt.show()

Пример решения

0 голосов
/ 17 июня 2019

Вы можете использовать следующую стратегию:

  • Создайте объект фигуры с подзаговорами, используя matplotlib, используя sharey=True
  • Цикл по столбцам DataFrame и назначение зеленого / красного цветов значениям, как показано в this answer
  • Передайте данный участок для построения определенного столбца, используя ax=ax

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

fig, axes = plt.subplots(ncols=3, sharey=True)

data= {'A': [np.nan, -0.5, 0.5], 
       'B': [np.nan, 0.3, -0.3],
       'C': [np.nan, -0.7, 0.7]}
df = pd.DataFrame(data=data, index=['2016', '2017', '2018'])

for ax, col in zip(axes, df.columns):
    df[col].plot(kind='bar', color=(df[col] > 0).map({True: 'g', False: 'r'}), ax=ax)
    ax.set_title(col)
plt.show()

enter image description here

...