如何绘制X轴为时间、Y轴为金额的分段时间对应数值图表
时间-金额趋势图表实现方案
以下是两种最常用的可行实现路径,你可以根据自己的数据量和使用习惯选择:
方案1:电子表格工具实现(适合无代码基础用户,Excel、金山表格等工具通用)
- 第一步:整理原始订单数据,至少保留3列核心字段:服务起始日期、服务结束日期、对应服务总金额,若按实收口径统计还需补充收款日期列
- 第二步:生成连续日期序列作为X轴数据源,日期范围覆盖你所有订单的最早开始日期到最晚结束日期,每行对应1个自然日
- 第三步:按你的统计规则计算每日收入:
- 若按实收规则统计(收入算到收款当日):直接统计所有收款日期等于当日的订单金额总和即可,公式示例:
=SUMIF(订单表!收款日期列, A2, 订单表!金额列),其中A2为当前行的日期单元格 - 若按权责发生制统计(收入归属到服务发生日):统计所有服务周期覆盖当日的订单,按摊销规则计算当日对应收入,公式示例:
=SUMIFS(订单表!金额列, 订单表!起始日期列, "<="&A2, 订单表!结束日期列, ">="&A2)
- 若按实收规则统计(收入算到收款当日):直接统计所有收款日期等于当日的订单金额总和即可,公式示例:
- 第四步:选中「日期列+每日收入列」两列数据,插入折线图或柱状图,工具会自动识别日期为X轴、收入金额为Y轴,调整标签、配色等格式即可出图。
方案2:Python代码实现(适合批量处理大量数据、需要定期更新图表的场景)
- 首先安装依赖库:
pip install pandas matplotlib openpyxl - 参考代码示例:
import pandas as pd import matplotlib.pyplot as plt # 1. 读取本地表格数据,处理日期格式 df = pd.read_excel("你的本地表格文件路径.xlsx") df["start_date"] = pd.to_datetime(df["服务起始日期"]) df["end_date"] = pd.to_datetime(df["服务结束日期"]) df["amount"] = df["服务总金额"] # 2. 生成完整日期范围,计算每日收入 all_dates = pd.date_range(start=df["start_date"].min(), end=df["end_date"].max(), freq="D") daily_income = [] for d in all_dates: # 此处为权责发生制统计逻辑,若要改为实收逻辑替换为对应筛选条件即可 day_total = df[(df["start_date"] <= d) & (df["end_date"] >= d)]["amount"].sum() daily_income.append(day_total) # 3. 组装数据并绘图 result_df = pd.DataFrame({"日期": all_dates, "当日收入": daily_income}) plt.figure(figsize=(12, 6)) plt.plot(result_df["日期"], result_df["当日收入"], linewidth=2) plt.xlabel("日期") plt.ylabel("收入金额") plt.title("每日收入趋势图") plt.xticks(rotation=45) plt.tight_layout() # 可保存为本地图片:plt.savefig("每日收入趋势.png") plt.show()
内容的提问来源于stack exchange,提问作者Bee
相关产品推荐
相关产品推荐

