You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 21:35:25