基于 Pandas 列的堆积条形图 - Python
Stacked Bar Chart based on Pandas Column - Python
我有一组数据可以用下面的代码复制:
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,以两种不同的颜色显示在图例中。这应该对神经元的所有分类值重复。 (一共六个)
这只是数据的一小部分,在整个数据集中,选项列最多有六个分类选项。我想在同一张图表上为每个单独的条形图。
如有任何帮助,我们将不胜感激。提前致谢!
根据您的评论,试试这个:
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)
我有一组数据可以用下面的代码复制:
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,以两种不同的颜色显示在图例中。这应该对神经元的所有分类值重复。 (一共六个)
这只是数据的一小部分,在整个数据集中,选项列最多有六个分类选项。我想在同一张图表上为每个单独的条形图。
如有任何帮助,我们将不胜感激。提前致谢!
根据您的评论,试试这个:
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)