如何使用iqplot结合Python-Iris的Cube列表绘制箱线图?
使用Python-Iris结合iqplot绘制箱线图
直接调用plt.plot()绘制Iris Cube报错,原因是Iris Cube是多维数据结构,matplotlib无法直接识别并处理其维度信息。下面是用iqplot实现箱线图的完整步骤:
1. 安装依赖库
如果尚未安装,先执行以下命令:
pip install iqplot iris pandas bokeh
2. 加载并预处理Cube数据
首先加载数据,然后根据需求对Cube做维度处理(比如空间聚合、分组提取),再转换为pandas DataFrame(iqplot适配表格型数据):
import iris import iqplot import pandas as pd from bokeh.io import show # 加载Cube CLIMDIR = "./your_climate_data_dir" # 替换为你的数据目录 hadgem2 = iris.load_cube(f"{CLIMDIR}/prec_EN-22_HadGEM2-ES_aml_ts_init:2040-end:2100.nc") # 示例:对空间维度(纬度/经度)取区域平均,得到时间序列数据 # 如果是单站点数据,可跳过此步,直接提取时间和数据 prec_time_series = hadgem2.collapsed(["latitude", "longitude"], iris.analysis.MEAN) # 提取时间坐标和数据值 times = prec_time_series.coord("time").units.num2date(prec_time_series.coord("time").points) prec_values = prec_time_series.data # 转换为DataFrame df = pd.DataFrame({"time": times, "precipitation": prec_values}) # 按季节分组(箱线图展示不同季节的降水分布) df["season"] = df["time"].dt.month.map( {12: "DJF", 1: "DJF", 2: "DJF", 3: "MAM", 4: "MAM", 5: "MAM", 6: "JJA", 7: "JJA", 8: "JJA", 9: "SON", 10: "SON", 11: "SON"} )
3. 用iqplot绘制箱线图
根据分组维度绘制箱线图,示例如下:
# 绘制季节分组的降水箱线图 box_plot = iqplot.box( df, q="precipitation", # 要展示分布的数值列 cats="season", # 分组类别列 title="2040-2100 Seasonal Precipitation Distribution", y_axis_label="Precipitation (units)", x_axis_label="Season" ) # 显示绘图(Jupyter环境可直接显示,本地环境需调用show) show(box_plot)
其他场景示例
如果需要按年份展示降水分布,只需修改分组逻辑:
# 提取年份 df["year"] = df["time"].dt.year # 绘制年度分组箱线图 annual_box_plot = iqplot.box( df, q="precipitation", cats="year", title="2040-2100 Annual Precipitation Distribution", y_axis_label="Precipitation (units)", x_axis_label="Year" ) show(annual_box_plot)
内容的提问来源于stack exchange,提问作者António Manuel Lameira Gaspar
相关产品推荐
相关产品推荐

