Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的比例条形图_Python_Bar Chart - Fatal编程技术网

Python中的比例条形图

Python中的比例条形图,python,bar-chart,Python,Bar Chart,我有一个这样的数据集 Customer_ID Country Gender Premium_account C_01 A M Yes C_02 A F No C_03 A F Yes C_04 A M Yes C_05 A M No C_06 B M No C_07 B

我有一个这样的数据集

Customer_ID Country Gender Premium_account
C_01        A      M       Yes
C_02        A      F       No
C_03        A      F       Yes
C_04        A      M       Yes
C_05        A      M       No
C_06        B      M       No
C_07        B      M       No
C_08        B      M       Yes
C_09        B      F       Yes
C_10        B      F       No
C_11        B      F       No

现在,我想为每个
性别
Premium\u账户
百分比进行绘图,并按
国家分开。我想知道如何使用Python软件包生成如所附图像中所示的比例条形图。实际上,我不确定我应该使用哪些软件包,因此,到目前为止,我真的无法提供我的任何代码。如果您能提供任何帮助,我将不胜感激。提前谢谢!

这里有一种方法可以获得想要的结果

导入并创建数据帧 解决方案 首先,我们将
Premium\u account
Gender
列映射为二进制,这样我们就可以对它们进行数学运算

df.Premium_account = df.Premium_account.map({'Yes': 1, 'No': 0})
df.Gender = df.Gender.map({'F': 1, 'M': 0})
df

    Customer_ID Country  Gender  Premium_account
0         C_01       A       0                1
1         C_02       A       1                0
2         C_03       A       1                1
3         C_04       A       0                1
4         C_05       A       0                0
5         C_06       B       0                0
6         C_07       B       0                0
7         C_08       B       0                1
8         C_09       B       1                1
9         C_10       B       1                0
10        C_11       B       1                0
接下来,我们使用
pandas
groupby
方法,按性别计算每个国家拥有溢价账户的人口比例

account_proportions = ((df
                       .groupby(['Country', 'Gender'])
                       .Premium_account.sum() / df.Premium_account.sum())
                       .unstack('Gender')
)
account_proportions

Gender     0    1
Country          
A        0.4  0.2
B        0.2  0.2
接下来,我们按行标准化数据帧。这是给我们一个比例图,而不仅仅是一个堆叠的条形图

account_proportions = account_proportions.div(account_proportions.sum(axis=1), axis=0)
account_proportions

Gender     0    1
Country          
A        0.4  0.2
B        0.2  0.2
最后,我们可以使用
pandas
自己的内置绘图方法来绘制堆叠条形图。请注意,我们保存了由
plot.bar()
方法返回的axis对象,这样我们就可以将图例条目修复回“男性”和“女性”。我们还在调用
plot.bar()
时指定标题。我们还使用
rot
参数来确保x轴标签符合要求

ax = account_proportions.plot.bar(stacked='True',
                                  title='Premium Account Customer Plot',
                                  rot=0)
ax.legend(['Male', 'Female'])


当然,还可以做其他事情,如or(请添加y轴标签),但这将为您提供大部分方法。

这里有一种方法可以获得所需的结果

导入并创建数据帧 解决方案 首先,我们将
Premium\u account
Gender
列映射为二进制,这样我们就可以对它们进行数学运算

df.Premium_account = df.Premium_account.map({'Yes': 1, 'No': 0})
df.Gender = df.Gender.map({'F': 1, 'M': 0})
df

    Customer_ID Country  Gender  Premium_account
0         C_01       A       0                1
1         C_02       A       1                0
2         C_03       A       1                1
3         C_04       A       0                1
4         C_05       A       0                0
5         C_06       B       0                0
6         C_07       B       0                0
7         C_08       B       0                1
8         C_09       B       1                1
9         C_10       B       1                0
10        C_11       B       1                0
接下来,我们使用
pandas
groupby
方法,按性别计算每个国家拥有溢价账户的人口比例

account_proportions = ((df
                       .groupby(['Country', 'Gender'])
                       .Premium_account.sum() / df.Premium_account.sum())
                       .unstack('Gender')
)
account_proportions

Gender     0    1
Country          
A        0.4  0.2
B        0.2  0.2
接下来,我们按行标准化数据帧。这是给我们一个比例图,而不仅仅是一个堆叠的条形图

account_proportions = account_proportions.div(account_proportions.sum(axis=1), axis=0)
account_proportions

Gender     0    1
Country          
A        0.4  0.2
B        0.2  0.2
最后,我们可以使用
pandas
自己的内置绘图方法来绘制堆叠条形图。请注意,我们保存了由
plot.bar()
方法返回的axis对象,这样我们就可以将图例条目修复回“男性”和“女性”。我们还在调用
plot.bar()
时指定标题。我们还使用
rot
参数来确保x轴标签符合要求

ax = account_proportions.plot.bar(stacked='True',
                                  title='Premium Account Customer Plot',
                                  rot=0)
ax.legend(['Male', 'Female'])


当然,还有其他一些事情可以做,比如or(请添加y轴标签),但这将为您提供大部分方法。

理想情况下,您应该提供一些代码来显示您所做的尝试。您能否至少详细说明一下您正在使用的库(
pandas
将很好地处理此问题)以及您希望如何绘制(例如,
Customer\u ID
Country
Gender
中的哪一个是您想要绘制的
Premium\u账户
?谢谢Chris的建议。我已经相应地更新了问题。但是,我真的不知道我应该采取什么方法来解决这个问题,因此,我无法提供我的任何编码。我真的很抱歉。)感谢您的帮助。
matplotlib
非常适合绘制图形。在这里找到了堆叠图形用法:谢谢@drd。这是一个非常好的建议!理想情况下,您应该提供一些代码来显示您尝试过的内容。您是否至少可以详细说明您正在使用的库(
pandas
将很好地处理此问题)你想要怎样的情节(例如,
Customer\u ID
Country
Gender
中的哪一个是您想要绘制的
Premium\u账户
?谢谢Chris的建议。我已经相应地更新了问题。但是,我真的不知道我应该采取什么方法来解决这个问题,因此,我无法提供我的任何编码。我真的很抱歉。)感谢您的帮助。
matplotlib
非常适合绘制图形。在此处找到堆叠图形用法:谢谢@drd。这是一个非常好的建议!