Назначьте указанный цвет для каждого значения категориальной переменной python - PullRequest
1 голос
/ 21 марта 2019

У меня есть датафрейм с 3 столбцами, например:

>  A        B    C 
  red     yes   100
  red     no     25
  blue    yes   200
  blue    no     20
  green   yes    40
  green   no     10
  yellow  yes    40
  yellow  no     20

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

Например, я хотел бы, чтобы красный цвет для детали на круговой диаграмме был назначен на красной метке, синий - для синего и т. Д. Иногда метка не может быть цветом, но я хочу выбрать цвет, который нужно назначить для этой метки.

ОЖИДАЕМЫЙ ВЫХОД :

enter image description here

Я попробовал этот код:

import pandas as pd
import matplotlib.pyplot as plt

df_bis = df.groupby(['A','B'], axis = 0).agg('count') 

df_bis['C'].plot(kind='pie',
                    figsize=(5,4),
                    subplots=True,
                    autopct='%1.1f%%', # add in percentages
                    startangle=90,     # start angle 90° 
                    shadow=True,       # add shadow         
                    colors = 
                 {'red':"red",'blue':"blue",'yellow':"gold",'green':"green"}

                       )                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
             plt.axis('equal') # Sets the pie chart to look like a circle.

Но это не работает.

У вас есть идея сделать это? Спасибо

Ответы [ 2 ]

0 голосов
/ 21 марта 2019

colors должен быть похож на список, где каждый элемент - это цвет, связанный с куском пирога. Используя ваш словарь, вы можете установить colors в:

color_dict = {'red':"red",'blue':"blue",'yellow':"gold",'green':"green"}
df_bis['C'].plot(kind='pie',
    ...
    colors=[color_dict[c] for c in df_bis['A']]
)
...
0 голосов
/ 21 марта 2019

Здесь, попробуйте это:

import pandas as pd
import matplotlib.pyplot as plt

data_frame = pd.read_csv("test.csv")

df_yes = data_frame.loc[data_frame['B']=='yes',:]
df_no = data_frame.loc[data_frame['B']=='no',:]
fig, (ax1, ax2) = plt.subplots(1, 2)

# plot each pie chart in a separate subplot
ax1.pie(df_yes["C"],  labels=df_yes["A"], autopct='%1.1f%%',
        shadow=True, colors=df_yes["A"])
ax1.set_title('Yes')

ax2.pie(df_no["C"],  labels=df_no["A"], autopct='%1.1f%%',
        shadow=True, colors=df_no["A"])
ax2.set_title('No')

plt.show()


Где тест CSV выглядит следующим образом:
enter image description here
И результат выглядит так:
enter image description here

Примечание: Вы можете настроить график (играть с цветом текста, размером рисунка, стилем диаграммы и т. Д.) И добавлять легенды в зависимости от ваших требований. Я не добавил легенду и оставил метки на круговой диаграмме.

Вы можете удалить метки (labels=df_yes["A"]) и добавить следующий код в каждую диаграмму для генерации легенд:

ax1.legend(labels=df_yes["A"], loc="upper center")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...