如何使用表格Birth、Death两列生成matplotlib图表并解决空白图问题
问题原因
- 你计算得到的
Birth和Death都是单个标量值:你对整列数据调用sum()后得到的是单一求和结果,整列的所有行都填充了同一个常数,传入plot()时只有一组坐标点,默认无标记的折线图不会渲染单个点,就会呈现空白。 - 死亡率计算逻辑存在括号误用:你当前写的
sum(pop.column("DEATHS")/sum(pop.column("2015")))是先对每个地区的死亡数除以总人口后再求和,和你预期的「总死亡数/总人口」逻辑不符,正确写法应该把sum(pop.column("DEATHS"))用括号包起来。
解决方案
根据你的实际需求选择对应修改方案:
方案1:仅展示整体出生/死亡率的单点
如果你就是要计算全量人口的整体出生率、死亡率,用散点图或者带标记的折线图渲染单点即可:
total_pop = sum(pop.column("2015")) # 修正计算逻辑 birth_rate = sum(pop.column("BIRTHS")) / total_pop death_rate = sum(pop.column("DEATHS")) / total_pop # 用散点图渲染 plots.scatter(birth_rate, death_rate, c='red', s=50) plots.xlabel("出生率") plots.ylabel("死亡率") plots.show()
方案2:展示各地区的出生/死亡率分布
如果你是要统计每个地区的出生率、死亡率做对比,不需要对列求和,直接用每行的出生、死亡数计算即可:
total_pop = sum(pop.column("2015")) # 生成每行对应地区的出生/死亡率 table = pop.with_column("Birth", pop.column("BIRTHS") / total_pop)\ .with_column("Death", pop.column("DEATHS") / total_pop) plots.plot(table["Birth"], table["Death"]) plots.xlabel("地区出生率") plots.ylabel("地区死亡率") plots.show()
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

