python - 如何绘制在 Y 轴上显示总人口百分比的分布曲线
问题描述
我正在尝试使用 matplotlib 绘制按地区分组的工资分布图,y 轴显示拥有该工资的人的百分比。
到目前为止,我已经能够想出:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
records = pd.DataFrame({'Name': ['John','Rachel','Tom','Stan','Jack','Ben','Joe','Juliet','Nigel','Veronica','Cam'],
'salary': [40104,29401,57383,38494,99302,44733,40242,49555,13934,44011,88920],
'Country': ['USA', 'USA', 'USA', 'France', 'France', 'France', 'China', 'China', 'Japan', 'Japan', 'France'],
'Region': ['America', 'America', 'America', 'Europe', 'Europe', 'Europe', 'Asia','Asia','Asia','Asia','Europe']})
recordsgraph = records.pivot(columns='Region',values='salary')
recordsgraph.plot.density()
但我希望 y 轴显示每个地区拥有该薪水的人口百分比。关于如何做到这一点的任何想法?
解决方案
Pandas密度图绘制了一个近似概率密度函数的核密度估计(kde) 。这样的函数被缩放,使得总面积等于。y 轴将在 x 轴上显示一个单位的估计概率。因此,在这种情况下,值表示工资有可能恰好是某个给定的 x 值加减半。例如,它在和之间。1
2.5e-5
0.0025 %
44,220
44,221
您可能需要更粗略的范围。假设您想要一个5000
. 如果将 y 轴上的值乘以 5000(和 100),您将得到薪水在给定 x 值正负 2500 范围内的百分比概率。下面的代码显示了一种方法在不接触数据的情况下乘以 y 值,使用FuncFormatter
.
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
import pandas as pd
def percentage_base_5000(x, pos):
return f'{x * 5000 * 100:.1f} %'
records = pd.DataFrame(
{'Name': ['John', 'Rachel', 'Tom', 'Stan', 'Jack', 'Ben', 'Joe', 'Juliet', 'Nigel', 'Veronica', 'Cam'],
'salary': [40104, 29401, 57383, 38494, 99302, 44733, 40242, 49555, 13934, 44011, 88920],
'Country': ['USA', 'USA', 'USA', 'France', 'France', 'France', 'China', 'China', 'Japan', 'Japan', 'France'],
'Region': ['America', 'America', 'America', 'Europe', 'Europe', 'Europe', 'Asia', 'Asia', 'Asia', 'Asia', 'Europe']})
recordsgraph = records.pivot(columns='Region', values='salary')
ax = recordsgraph.plot.density()
ax.yaxis.set_major_formatter(FuncFormatter(percentage_base_5000))
ax.set_ylabel('Percentage for a 5000-range salary')
plt.tight_layout()
plt.show()
请注意,a 的副作用FuncFormatter
是状态栏中显示的值将获得相同的转换。因此,光标值x=3.67e4 y=11.7 %
表示工资在 36700-2500 和 36700+2500 之间的估计概率约为 11.7%。
推荐阅读
- java - PHP - 将 JAVA / JS 对象转换为 PHP 数组
- html - 模态弹出窗口在表格的下拉菜单中不起作用
- oracle - 使用 IF 条件检查表中的日期格式
- visual-studio-code - 我可以在刷新文件之前制作 files.useExperimentalFileWatcher *ask/warn* 吗?
- qt - Qt 3D 条形图在大尺寸上变得无响应
- python - Google Cloud Dataflow (Python) - 未正确安装依赖项
- python - 如果已经存在内容 ID,python scrapy 最好的方法是不重新抓取
- sql-agent-job - 从 SQL 代理 Job cmdexec 运行 exe 传递参数今天的日期和日期 -52 周
- coq - 我如何证明她不能仅通过介绍和申请来证明 Or_commutative?
- angular - npm 错误!运行命令时代码 E404 npm i --save core-js zone.js rxjs system.js