python - 在 Python 中绘制从数字派生的比例数据
问题描述
我有一个df
包含学生和非学生年龄的数据框,看起来像这样:
Subject Student Age
001 yes 21
002 yes 45
003 no 61
004 no 37
...
我想绘制 40 岁以下每组的比例。我可以在 R 中做到这一点,plot(factor(age < 40) ~ Student, data = df)
这给了我:
有没有办法在 Python 中复制它,最好使用 matplotlib 或 seaborn?
解决方案
没有内置选项来创建这样的情节。您当然可以通过计算相关数字来通过 matplotlib 创建它。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
a = np.random.poisson(lam=40, size=6000)
b = ((a>50).astype(int)+np.random.rand(6000))>0.9
df = pd.DataFrame({"Subject" : np.arange(6000),
"Age" : a, "Student" : b})
df["Age>40"] = df["Age"] > 40
def propplot(x, y, data):
xdata = data[[x,y]].groupby(x)
xcount = xdata.count()
fig, axes = plt.subplots(ncols=len(xcount),
gridspec_kw={"width_ratios":list(xcount[y].values)})
for ax, (n,grp) in zip(axes, xdata):
ycount = grp.groupby(y).count().T
ycount /= float(ycount.values.sum())
ycount.plot.bar(stacked=True, ax=ax, width=1, legend=False)
ax.set_xlabel(n)
ax.set_xlim(-.5,.5)
ax.set_ylim(0,1)
ax.set_xticks([])
axes[0].set_ylabel(y)
axes[0].legend(ncol=100, title=y, loc=(0,1.02))
fig.text(0.5,0.02, x)
propplot("Student", "Age>40", df)
plt.show()
推荐阅读
- ruby-on-rails - 将 has_many/belongs_to 与数组关联
- python - Jupyter笔记本的奇怪问题
- python - PermissionError:[Errno 13] 通过上下文变量包含模板时权限被拒绝,硬编码时工作正常
- python - 公司的 Python 包命名策略
- excel - Excel VBA 日期自动更改
- unity3d - 如何知道 AR 空间中的物体位置?(台式机和移动设备之间的行为不一致)
- routing - 使用 OSM 数据创建路由?
- c++ - C++ 成员变量被非成员函数覆盖
- c# - 是否可以制作包含 .NET Core Framework 的 .NET Core DLL?
- google-apps-script - HTTP 请求在 Playground 上工作不适用于 Google App 脚本