如何用Python绘制月度短期与长期CDF对比的12幅子图?
Python实现月度短期与长期CDF对比绘图指导
前提假设
假设你已将计算好的CDF数据整理为以下结构:
- 短期CDF:字典
short_term_cdfs,键为元组(year, month),值为包含两个数组的元组(x_vals, cdf_vals),其中x_vals是能源值分位点,cdf_vals是对应累积概率 - 长期CDF:字典
long_term_cdfs,键为月份(1-12),值为元组(x_vals, cdf_vals)
实现步骤与代码
1. 导入依赖库
import matplotlib.pyplot as plt import numpy as np
2. 配置绘图基础设置
# 设置全局绘图风格 plt.style.use('seaborn-v0_8-whitegrid') # 统一图尺寸 fig_width, fig_height = 10, 6
3. 循环生成12幅月度对比图
# 遍历1-12月 for month in range(1, 13): # 创建新画布 fig, ax = plt.subplots(figsize=(fig_width, fig_height)) # 绘制长期月度CDF(基准曲线) lt_x, lt_cdf = long_term_cdfs[month] ax.plot(lt_x, lt_cdf, color='black', linewidth=2, label=f'长期(14年合并)') # 筛选当前月份的所有短期CDF数据 month_short_cdfs = [(y, cdf) for (y, m), cdf in short_term_cdfs.items() if m == month] # 生成区分年份的颜色映射 colors = plt.cm.viridis(np.linspace(0, 1, len(month_short_cdfs))) # 绘制各年份短期CDF for idx, (year, (st_x, st_cdf)) in enumerate(month_short_cdfs): ax.plot(st_x, st_cdf, linestyle='--', color=colors[idx], label=f'{year}年') # 设置图标注 ax.set_title(f'{month}月能源值CDF对比', fontsize=14) ax.set_xlabel('能源值', fontsize=12) ax.set_ylabel('累积概率', fontsize=12) # 图例放在图外避免遮挡 ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left') # 自动调整布局 plt.tight_layout() # 保存高清图片(替换为你的存储路径) plt.savefig(f'{month}月CDF对比图.png', dpi=300, bbox_inches='tight') # 如需交互查看,取消下方注释 # plt.show() # 关闭画布释放内存 plt.close(fig)
关键细节说明
- 曲线区分:用黑色实线标注长期CDF,虚线标注各年份短期CDF,通过颜色区分不同年份,确保对比逻辑清晰
- 图例优化:将图例置于图外右上角,避免遮挡核心曲线
- 内存管理:循环内调用
plt.close(fig),避免批量绘图时出现内存泄漏 - 保存设置:
bbox_inches='tight'确保图例不会被截断,dpi=300保证图片高清
内容的提问来源于stack exchange,提问作者Jawairia
相关产品推荐
相关产品推荐

