У меня есть набор данных, которые можно реплицировать с помощью следующего кода:
import numpy as np
import pandas as pd
Neurons = np.array([
20, 600, 300, 300, 200, 50, 20, 100, 50, 300, 100, 600, 20,20,
600, 200, 200, 600, 600, 100, 200, 200, 300, 200, 100, 50, 100,
600, 200, 300, 20, 20, 200, 300, 600, 600, 100, 300, 200, 300])
Option = np.array([
'Put', 'Put', 'Put', 'Put', 'Put', 'Put', 'Put', 'Put',
'Put', 'Put', 'Put', 'Put', 'Put', 'Put', 'Put', 'Put',
'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call',
'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call',
'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call', 'Call'])
df = pd.DataFrame({"Neurons" : Neurons, "Option": Option})
Столбцы «Нейроны» и «Опции» следует рассматривать как категориальные. Я хочу построить гистограмму, в которой нейроны отображаются в порядке возрастания по оси x и количеству моделей по оси y.
Например, есть 6 моделей, где есть 20 нейронов, состоящих из четырех Put и 2 Call. Таким образом, гистограмма должна отображать два столбца со значениями по оси Y 4 и 2 соответственно, в двух разных цветах и в легенде. Это следует повторить для всех категориальных значений нейронов. (всего их шесть)
Это всего лишь небольшое подмножество данных, где в полном наборе данных столбец Option содержит до шести категориальных параметров. Я хочу отдельную полосу на одном графике для каждого.
Любая помощь будет принята с благодарностью. Заранее благодарю!
Основываясь на вашем комментарии, попробуйте следующее:
df.groupby('Option').Neurons.value_counts().unstack(0).plot.bar()
В этом коде мы сначала группируем по параметрам, а затем получаем количество значений для каждого значения нейронов в группе параметров. Затем разверните стек, чтобы у вас был один столбец для Option="Put" и один столбец для Option="Call". Затем с данными в этом формате вы получите нужный график.
Выход:
Я не уверен, что это самое идеальное решение этой проблемы, но после некоторых размышлений мне удалось найти обходной путь.
ct = pd.crosstab(df.Option,df.Neurons)
ct.transpose().plot.bar(stacked=False)
Вы можете сделать pd.crosstab(df.Neurons,df.Option).plot.bar(stacked=False) но да, я думаю, это то, что вам нужно?