Ожидаемый график похож на легенды (ie атрибут имени «Домен A», «Домен B», «Домен C» и т. Д. c должен быть представлен по оси X
и такие статусы, как «Завершено», «Не завершено» и т. д. c должны присутствовать в легендах или атрибуте имени для гистограммы.
Как это?
Я хотел бы достичь этого в течение 1 oop, возможно ли это?
Возможно, так и есть. Но Есть намного более простых способов получить то, что вы хотите. Посмотрите на один из многих замечательных ответов на вопрос Pandas: Как определить процентное соотношение типов членов группы в подгруппе? чтобы увидеть, как вы можете сократить свой код до одной или двух строк, а затем построить полную графическую фигуру с несколькими дополнительными строками, подобными этой:
# data restructuring
df_ply = pd.crosstab(df['Domain'], df['Course1 completion'], normalize='index')
# plotly setup
fig = go.Figure()
# add trace for eat
for col in df_ply.columns:
#print(col)
fig.add_trace(go.Bar(x=df_ply.index, y=df_ply[col], name = col))
fig.update_layout(title=dict(text='Completion status per domain'))
fig.show()
Это циклически перебирает столбцы реструктурированной фрейм данных и добавляет столбец для Course1 Completion
статуса и отображает их для Domain
.
Полный код с данные:
# imports
import pandas as pd
import plotly.graph_objects as go
from plotly.graph_objs import Pie, Layout,Figure
import plotly.offline as py
# data
df = pd.DataFrame({'HC No.': {0: 1,
1: 2,
2: 3,
3: 4,
4: 5,
5: 6,
6: 7,
7: 8,
8: 9,
9: 10,
10: 11,
11: 12,
12: 13,
13: 14,
14: 15,
15: 16,
16: 17,
17: 18,
18: 19,
19: 20,
20: 21,
21: 22,
22: 23,
23: 24,
24: 25,
25: 26},
'Domain': {0: 'Domain A',
1: 'Domain A',
2: 'Domain A',
3: 'Domain A',
4: 'Domain A',
5: 'Domain B',
6: 'Domain B',
7: 'Domain B',
8: 'Domain B',
9: 'Domain B',
10: 'Domain B',
11: 'Domain C',
12: 'Domain C',
13: 'Domain C',
14: 'Domain C',
15: 'Domain C',
16: 'Domain D',
17: 'Domain D',
18: 'Domain D',
19: 'Domain D',
20: 'Domain D',
21: 'Others',
22: 'Others',
23: 'Others',
24: 'Others',
25: 'Others'},
'Project': {0: 'Dog',
1: 'Dog',
2: 'Cat',
3: 'Cat',
4: 'Bird',
5: 'Tree',
6: 'Tree',
7: 'Plant',
8: 'Seed',
9: 'Seed',
10: 'Soil',
11: 'Liquid',
12: 'Solid',
13: 'Solid',
14: 'Solid',
15: 'Gas',
16: 'Gas',
17: 'Gas',
18: 'Gas',
19: 'Slime',
20: 'Slime',
21: 'Metal',
22: 'Metal',
23: 'wood',
24: 'wood',
25: 'Plastic'},
'Sub Project\n': {0: '',
1: '',
2: '',
3: '',
4: '',
5: '',
6: '',
7: '',
8: '',
9: '',
10: '',
11: '',
12: '',
13: '',
14: '',
15: '',
16: '',
17: '',
18: '',
19: '',
20: '',
21: '',
22: '',
23: '',
24: '',
25: ''},
'Emp Name': {0: 'Associate 1',
1: 'Associate 2',
2: 'Associate 3',
3: 'Associate 4',
4: 'Associate 5',
5: 'Associate 6',
6: 'Associate 7',
7: 'Associate 8',
8: 'Associate 9',
9: 'Associate 10',
10: 'Associate 11',
11: 'Associate 12',
12: 'Associate 13',
13: 'Associate 14',
14: 'Associate 15',
15: 'Associate 16',
16: 'Associate 17',
17: 'Associate 18',
18: 'Associate 19',
19: 'Associate 20',
20: 'Associate 21',
21: 'Associate 22',
22: 'Associate 23',
23: 'Associate 24',
24: 'Associate 25',
25: 'Associate 26'},
'Education mark': {0: '1,46975374',
1: '0,4285622',
2: '1,13064316',
3: '1,29683695',
4: '1,18009194',
5: '1,99',
6: '0,73110463',
7: '1,08737382',
8: '1,72600086',
9: '0,35357572',
10: '0,19593062',
11: '1,96790904',
12: '1,02216422',
13: '1,92464914',
14: '1,57124406',
15: '1,65805295',
16: '0,19593062',
17: '0',
18: '0,93860653',
19: '0,41443375',
20: '0,90421186',
21: '1,54062763',
22: '1,3367975',
23: '0,41977105',
24: '1,99',
25: '1,99'},
'Course1 completion': {0: 'Completed',
1: 'Completed',
2: 'Completed',
3: 'Not Completed',
4: 'Completed',
5: 'Not Completed',
6: 'Completed',
7: 'Completed',
8: 'Not Completed',
9: 'Completed',
10: "Planned in Q4 FY'20",
11: 'Completed',
12: 'Completed',
13: 'Not Completed',
14: 'Not Required',
15: 'Completed',
16: 'Completed',
17: 'Not Required',
18: 'Completed',
19: 'Completed',
20: 'Completed',
21: 'Not Completed',
22: 'Not Completed',
23: 'Completed',
24: 'Completed',
25: 'Not Completed'},
'Course2 completion': {0: 'Completed',
1: 'Completed',
2: '',
3: '',
4: '',
5: '',
6: '',
7: '',
8: '',
9: '',
10: '',
11: '',
12: '',
13: '',
14: '',
15: '',
16: 'Completed',
17: '',
18: '',
19: 'Completed',
20: '',
21: '',
22: '',
23: '',
24: '',
25: ''}})
# data restructuring
df_ply = pd.crosstab(df['Domain'], df['Course1 completion'], normalize='index')
# plotly setup
fig = go.Figure()
# add trace for eat
for col in df_ply.columns:
#print(col)
fig.add_trace(go.Bar(x=df_ply.index, y=df_ply[col], name = col))
fig.update_layout(title=dict(text='Completion status per domain'))
fig.show()