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

如何在Matplotlib单图多子图中为每个子图添加均值标题?

实现方案

要给每个子图添加对应的均值标题,核心是在筛选符合条件的网格单元时,同时保存该单元的均值,之后在绘制子图时调用set_title()方法设置标题。以下是修改后的完整代码:

import matplotlib.pyplot as plt
import numpy as np

x=np.array([11,12,12,13,21,14])
y=np.array([28,5,15,16,12,4])
v=np.array([10,5,2,10,6,7])

x = x // 4 
y = y // 4 
k=10
cells = [[[] for _ in range(k)] for _ in range(k)] # 创建x-y平面的网格单元

# 将v值分配到对应网格单元
for ycell in range(k):
    for xcell in range(k):
        cells[ycell][xcell] = v[(y == ycell) & (x == xcell)]

# 计算每个网格单元的均值,并筛选均值>2的单元(同时保存数据和均值)
mean_v = [[0.0 for _ in range(k)] for _ in range(k)]
to_plot = []

for ycell in range(k):
    for xcell in range(k):
        cell_data = cells[ycell][xcell]
        mean_val = np.mean(cell_data)
        mean_v[ycell][xcell] = mean_val
        if mean_val > 2:
            # 存储数据和对应的均值,用元组打包
            to_plot.append( (cell_data, mean_val) )
            
plt.rcParams["figure.figsize"] = (20, 10)

SIZE = 5   
f, ax = plt.subplots(SIZE,SIZE)

for idx, (data, mean_val) in enumerate(to_plot):
    x_pos = idx % SIZE
    y_pos = idx // SIZE
    ax[y_pos, x_pos].hist(data)
    # 设置子图标题,格式化均值显示(保留2位小数)
    ax[y_pos, x_pos].set_title(f"Mean: {mean_val:.2f}")

# 调整子图间距,避免标题和图形重叠
plt.tight_layout()
plt.show()           

关键改动说明:

  • 修改to_plot的存储结构:把原来只存网格数据的列表,改成存储(数据, 均值)的元组列表,这样绘制时能直接获取当前子图对应的均值。
  • 添加标题设置:在循环绘制每个子图时,调用ax[y_pos, x_pos].set_title(),用格式化字符串把均值作为标题内容,:.2f是为了让均值显示更整洁(保留2位小数)。
  • 优化冗余代码:删除了原代码中重复填充cells的循环,同时把mean_v的初始化改成了更合理的浮点数类型。
  • 添加tight_layout():自动调整子图间距,避免标题和相邻子图的图形重叠,提升可视化效果。

内容的提问来源于stack exchange,提问作者Jerome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:06:22