如何在Python中为零线上下的正负异常区域填色
Python绘制印度洋偶极子指数(1979-2014)并填充正负区域
以下是实现需求的完整代码,可复刻参考图样式,对零线上下的正负区域分别填色:
import numpy as np import matplotlib.pyplot as plt import pandas as pd # 定义年份与指数数据 YEARS = np.arange(np.datetime64("1979-07-01"), np.datetime64("2015-07-01"), dtype='datetime64[Y]') DATA = (-0.5635147,0.04471147,1.4331872,-0.09839201,0.24226117,-0.08254513,0.29853868,-0.79512143,-0.79967123,-0.1649437,-0.21625134,-0.22912416,-1.0080668,-0.46486163,0.62073106,-1.0641583,-0.27737525,0.35150194,-0.4560886,0.1954728,0.5420398,0.3017679,-0.055624068,-0.38038778,0.5891459,0.7454071,0.2169415,-0.09263754,0.455848,0.35939074,0.38828057,-0.933143,1.1125178,0.026810408,-0.2547031,0.012055755) # 转换日期格式以适配matplotlib绘图 years_pd = pd.to_datetime(YEARS) # 创建绘图画布与轴 fig, ax = plt.subplots(figsize=(12, 6)) # 绘制指数折线 ax.plot(years_pd, DATA, color='black', linewidth=2) # 填充零线以上的正区域(蓝色半透明) ax.fill_between(years_pd, 0, DATA, where=(DATA > 0), color='blue', alpha=0.5) # 填充零线以下的负区域(红色半透明) ax.fill_between(years_pd, 0, DATA, where=(DATA < 0), color='red', alpha=0.5) # 设置图表样式 ax.set_title('INDIAN OCEAN DIPOLE INDEX (1979-2014)', fontsize=14, fontweight='bold') ax.set_ylabel('Index Value', fontsize=12) ax.set_xlabel('Year', fontsize=12) ax.axhline(y=0, color='black', linestyle='--', linewidth=1) ax.grid(True, linestyle='--', alpha=0.7) # 调整x轴刻度避免重叠 plt.xticks(rotation=45) plt.tight_layout() # 显示图表 plt.show()
关键细节说明
- 日期处理:将numpy的
datetime64[Y]类型转为pandas datetime,确保年份能被matplotlib正确识别并展示。 - 区域填充:通过
fill_between的where参数精准区分正负区域,alpha控制填充色透明度,保证折线的可读性。 - 样式优化:添加虚线零线、网格线,旋转x轴刻度,让图表布局更清晰美观。
内容的提问来源于stack exchange,提问作者joel
相关产品推荐
相关产品推荐

