13 热图 imshow

用途

矩阵型数据的色阶表达,如月—时负荷矩阵、相关系数矩阵、时频幅值。

示例(5 张)

13-1 月—时负荷矩阵热图

月—时负荷矩阵热图

13-2 谐波时频图(次数—时间)

谐波时频图(次数—时间)

13-3 各节点各时段电压偏差矩阵

各节点各时段电压偏差矩阵

13-4 电气量相关系数矩阵热图

电气量相关系数矩阵热图

13-5 日负荷灰度图(一周 7 天)

日负荷灰度图(一周 7 天)

代码

以下 5 个函数取自 code/第三批_面积与场261106.py,直接调用即可出图。版式(宋体 + Times、10 磅、刻度朝内四边、图内无标题、留白自检)由 code/公共配置261106.py 的 setup_cn_style() 与 save() 统一提供。

# 摘自 code/第三批_面积与场261106.py

def heat_01():
    """月—时负荷矩阵热图。"""
    fig, ax = new_fig(left=0.19, bottom=0.21, right=0.86)
    rng = np.random.default_rng(501)
    M = np.zeros((12, 24))
    for m in range(12):
        season = 1 + 0.22 * np.cos((m - 0.5) / 12 * 2 * np.pi + np.pi)
        for h in range(24):
            daily = 0.62 + 0.38 * np.exp(-((h - 10) / 3.4) ** 2) + 0.45 * np.exp(-((h - 16) / 3.0) ** 2)
            M[m, h] = 640 * season * daily + rng.normal(0, 12)
    im = ax.imshow(M, aspect="auto", cmap=CMAP_SEQ, origin="lower",
                   extent=[0, 24, 0.5, 12.5])
    ax.set_xticks([0, 4, 8, 12, 16, 20, 24])
    ax.set_yticks([1, 3, 5, 7, 9, 11])
    ax.set_xlabel("时刻 " + IT["t"] + " / h")
    ax.set_ylabel("月份")
    _cbar(fig, ax, im, "负荷 " + IT["P"] + " / kW")
    save(fig, "13_热图", "13_热图_月时负荷矩阵")

def heat_02():
    """谐波时频图(次数—时间)。"""
    fig, ax = new_fig(left=0.19, bottom=0.21, right=0.86)
    rng = np.random.default_rng(502)
    f = np.arange(2, 26)
    t = np.arange(0, 24, 0.5)
    Z = np.zeros((len(f), len(t)))
    for i, fi in enumerate(f):
        Z[i] = (30 / (fi ** 0.9)) * (1 + 0.6 * np.exp(-((t - 11) / 4) ** 2)
                                     + 0.5 * np.exp(-((t - 18) / 3) ** 2))
    Z += rng.normal(0, 0.5, Z.shape)
    im = ax.imshow(Z, aspect="auto", cmap=CMAP_SEQ, origin="lower",
                   extent=[0, 24, 1.5, 26.5])
    ax.set_xticks([0, 4, 8, 12, 16, 20, 24])
    ax.set_yticks([3, 5, 7, 11, 17, 23])
    ax.set_xlabel("时刻 " + IT["t"] + " / h")
    ax.set_ylabel("谐波次数 " + IT["h"])
    _cbar(fig, ax, im, "幅值 " + IT["I"] + SUB["h"] + " / A")
    save(fig, "13_热图", "13_热图_谐波时频分布")

def heat_03():
    """各节点各时段电压偏差矩阵。"""
    fig, ax = new_fig(left=0.19, bottom=0.21, right=0.86)
    rng = np.random.default_rng(503)
    nodes = 10
    M = np.zeros((nodes, 24))
    for i in range(nodes):
        base = 1.8 - 0.42 * i
        M[i] = base + rng.normal(0, 0.5, 24) - 0.9 * np.exp(-((np.arange(24) - 15) / 4) ** 2)
    im = ax.imshow(M, aspect="auto", cmap=CMAP_DIV, origin="lower",
                   extent=[0, 24, 0.5, nodes + 0.5], vmin=-6, vmax=6)
    ax.set_xticks([0, 4, 8, 12, 16, 20, 24])
    ax.set_yticks([1, 3, 5, 7, 9])
    ax.set_xlabel("时刻 " + IT["t"] + " / h")
    ax.set_ylabel("节点编号")
    _cbar(fig, ax, im, "电压偏差 / %")
    save(fig, "13_热图", "13_热图_节点电压偏差矩阵")

def heat_04():
    """电气量相关系数矩阵热图。"""
    fig, ax = new_fig(left=0.26, bottom=0.26, right=0.86)
    rng = np.random.default_rng(504)
    names = ["负荷", "电压", "电流", "功率因数", "温度", "谐波"]
    A = rng.normal(0, 1, (6, 200))
    A[1] = -0.75 * A[0] + 0.4 * rng.normal(0, 1, 200)
    A[2] = 0.92 * A[0] + 0.2 * rng.normal(0, 1, 200)
    A[3] = 0.5 * A[0] + 0.5 * rng.normal(0, 1, 200)
    A[4] = 0.68 * A[0] + 0.5 * rng.normal(0, 1, 200)
    A[5] = 0.55 * A[0] + 0.6 * rng.normal(0, 1, 200)
    C = np.corrcoef(A)
    im = ax.imshow(C, cmap=CMAP_DIV, vmin=-1, vmax=1)
    for i in range(6):
        for j in range(6):
            ax.text(j, i, f"{C[i, j]:.2f}", ha="center", va="center",
                    fontsize=FS - 3)
    ax.set_xticks(range(6))
    ax.set_yticks(range(6))
    ax.set_xticklabels(names, rotation=30, ha="right")
    ax.set_yticklabels(names)
    _cbar(fig, ax, im, "相关系数 " + IT["r"])
    save(fig, "13_热图", "13_热图_电气量相关系数矩阵")

def heat_05():
    """日负荷灰度图(一周 7 天)。"""
    fig, ax = new_fig(left=0.19, bottom=0.21, right=0.86)
    rng = np.random.default_rng(505)
    M = np.zeros((7, 24))
    for d in range(7):
        wk = 1.0 if d < 5 else 0.78
        for h in range(24):
            M[d, h] = wk * (430 + 180 * np.exp(-((h - 10) / 3.4) ** 2)
                            + 210 * np.exp(-((h - 16) / 3.0) ** 2)) + rng.normal(0, 14)
    im = ax.imshow(M, aspect="auto", cmap="Greys", origin="lower",
                   extent=[0, 24, 0.5, 7.5])
    ax.set_xticks([0, 4, 8, 12, 16, 20, 24])
    ax.set_yticks([1, 2, 3, 4, 5, 6, 7])
    ax.set_yticklabels(["周一", "周二", "周三", "周四", "周五", "周六", "周日"])
    ax.set_xlabel("时刻 " + IT["t"] + " / h")
    ax.set_ylabel("星期")
    _cbar(fig, ax, im, "负荷 " + IT["P"] + " / kW")
    save(fig, "13_热图", "13_热图_一周负荷灰度图")

说明

  • 图片 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
  • 图内不放标题,图题由本文件的标题承担。
  • 数据为 10 kV 配网、380 V 低压、50 Hz 量级的仿真算例,随机种子固定,重跑结果一致。
posted on 2026-11-07 01:03  小青蛙电气  阅读(3)  评论(0)    收藏  举报