【发布时间】:2017-10-14 17:54:08
【问题描述】:
我正在尝试在 python 中重现增长图表。基础数据以天为单位使用年龄,但我想以 2 个月为间隔显示年龄 (x) 轴。这可以纯粹使用轴/标签选项来完成,还是我需要向数据添加计算列?
这是为了自学,所以解释比代码更受欢迎。
这就是我所拥有的:
# Import the WHO weight-for-age data from Excel
import pandas
import matplotlib.pyplot as plt
import numpy as np
WHO_WFA = pandas.read_excel("PercentilesData.xlsx", sheetname="WGT_WHO")
# ... slice the dataframe and plot it
# steps omitted for brevity
# Plot with data:
plt.plot(maleAge, maleP01, maleAge, maleP1, maleAge, maleP3, maleAge, maleP5, maleAge, maleP10, maleAge, maleP15, maleAge, maleP25, maleAge, maleP50, maleAge, maleP75, maleAge, maleP85, maleAge, maleP90, maleAge, maleP95, maleAge, maleP97, maleAge, maleP99, maleAge, maleP999)
# Set up the axes/labels
plt.title('Weight-for-Age: male (WHO)')
plt.xlabel('Age (days)')
plt.ylabel('Weight (kg)')
plt.axis([0,1900,0,30])
plt.grid(True)
plt.show()
相反,x 轴应该有 2 个月增量的刻度(2,4,6,8,10,12 ... 到 60)。不过,我仍然需要使用天数绘制的数据!所以x轴值60应该显示为2,120(天)显示为4(月)等
感谢您的帮助!
更新 1: 只要调整 x 轴范围,将值除以月份持续时间确实会产生相同的曲线:
# month duration
mo = 30.4375
# divide age in days by month duration
plt.plot(maleAge/mo, maleP01, maleAge/mo, maleP1, maleAge/mo, maleP3, maleAge/mo, maleP5, maleAge/mo, maleP10, maleAge/mo, maleP15, maleAge/mo, maleP25, maleAge/mo, maleP50, maleAge/mo, maleP75, maleAge/mo, maleP85, maleAge/mo, maleP90, maleAge/mo, maleP95, maleAge/mo, maleP97, maleAge/mo, maleP99, maleAge/mo, maleP999)
# Adjust the maximum x value to 60 ...
plt.axis([0,60,0,30])
这会产生:
最后一步是如何使用每 12 个月的主要刻度和每 2 个月的次要刻度来显示轴。
对于真正好奇的人: 世卫组织生长图表中的月份长度标准化为 30.4375 天。数据从 0 到 1856 天(60.98 个完整月)。对于每一天(0, 1, ... 1856),有 15 个权重值,每个对应不同的百分位曲线,总共 27840 个值。
原始数据公开于:WHO data/weight-for-age for boys
【问题讨论】:
-
这个的输入数据是什么?因为月份通常可以有 28 到 31 天,所以不清楚输出应该是什么。
-
对于增长图表,一个月被认为是 30.4375 天。数据范围从 0 到 1856 天(60.98 个完整月)。不过,就问题而言,计算中使用的值并不重要。
-
那么绘制年龄除以 30.4375 有什么问题?
plt.plot(maleAge/30.4375, maleP01, maleAge/30.4375, maleP1, ...) -
您是否有机会在代码中提供示例数据,或共享原始数据? (为了也给别人一个更准确的答案)
-
其实这里没有人关心实际数据,需要的是问题的minimal reproducible example。另请参阅How to make good reproducible pandas examples 或我的回答中有关如何执行此操作的数据,下次提问时。
标签: python matplotlib graph axis