20 三维柱状 bar3d

用途

两个离散维度加一个量值,如月×时段负荷、节点×谐波次数。

示例(5 张)

20-1 各月各时段负荷三维柱状图

各月各时段负荷三维柱状图

20-2 各节点各次谐波幅值三维柱状图

各节点各次谐波幅值三维柱状图

20-3 三种方案三项指标对比三维柱状图

三种方案三项指标对比三维柱状图

20-4 各馈线四季负载率三维柱状图

各馈线四季负载率三维柱状图

20-5 各设备容量五年增长三维柱状图

各设备容量五年增长三维柱状图

代码

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

# 摘自 code/第四批_信号与三维261106.py

def bar3d_01():
    """各月各时段负荷三维柱状图。"""
    fig, ax = new_fig3d(left=0.13)
    months = np.arange(1, 7)
    segs = np.arange(0, 4)
    vals = np.array([
        [420, 580, 640, 470],
        [398, 552, 612, 445],
        [362, 508, 566, 412],
        [336, 470, 524, 386],
        [348, 486, 542, 398],
        [404, 566, 626, 458],
    ])
    X, Y = np.meshgrid(months, segs, indexing="ij")
    X = X.ravel() - 0.32
    Y = Y.ravel() - 0.32
    dz = vals.ravel()
    colors = plt.get_cmap(CMAP_SEQ)(dz / dz.max())
    ax.bar3d(X, Y, np.zeros_like(dz), 0.64, 0.64, dz, color=colors,
             edgecolor="0.4", linewidth=0.2, shade=True)
    ax.set_xticks(months)
    ax.set_xticklabels([str(m) for m in months])
    ax.set_yticks([0, 1, 2, 3])
    ax.set_yticklabels(["0-6", "6-12", "12-18", "18-24"])
    ax.set_xlabel("月份", labelpad=2)
    ax.set_ylabel("时段 / h", labelpad=2)
    ax.set_zlabel("负荷 " + IT["P"] + " / kW", labelpad=2)
    ax.view_init(elev=22, azim=-126)
    ax.set_zlim(0, 780)
    save(fig, "20_三维柱状", "20_三维柱状_月时负荷分布")

def bar3d_02():
    """各节点各次谐波幅值三维柱状图。"""
    fig, ax = new_fig3d(left=0.13)
    nodes = np.arange(1, 6)
    orders = np.array([3, 5, 7, 9])
    vals = np.array([
        [32.6, 22.4, 13.8, 5.2],
        [28.4, 19.6, 11.2, 4.4],
        [36.8, 25.8, 15.4, 6.0],
        [24.2, 17.2, 9.8, 3.8],
        [30.8, 21.6, 12.6, 4.9],
    ])
    X, Y = np.meshgrid(nodes, np.arange(len(orders)), indexing="ij")
    X = X.ravel() - 0.3
    Y = Y.ravel() - 0.3
    dz = vals.ravel()
    colors = plt.get_cmap(CMAP_SEQ)(dz / dz.max())
    ax.bar3d(X, Y, np.zeros_like(dz), 0.6, 0.6, dz, color=colors,
             edgecolor="0.4", linewidth=0.2, shade=True)
    ax.set_xticks(nodes)
    ax.set_xticklabels([f"N{i}" for i in nodes])
    ax.set_yticks([0, 1, 2, 3])
    ax.set_yticklabels([str(o) for o in orders])
    ax.set_xlabel("节点", labelpad=2)
    ax.set_ylabel("谐波次数 " + IT["h"], labelpad=2)
    ax.set_zlabel("电流幅值 " + IT["I"] + SUB["h"] + " / A", labelpad=2)
    ax.view_init(elev=24, azim=-124)
    ax.set_zlim(0, 42)
    save(fig, "20_三维柱状", "20_三维柱状_节点谐波幅值")

def bar3d_03():
    """三种方案三项指标对比三维柱状图。"""
    fig, ax = new_fig3d(left=0.22)
    plans = np.arange(3)
    metrics = np.arange(3)
    vals = np.array([
        [4.62, 12.8, 86.4],
        [3.24, 9.6, 92.1],
        [2.86, 8.2, 94.8],
    ])
    X, Y = np.meshgrid(plans, metrics, indexing="ij")
    X = X.ravel() - 0.3
    Y = Y.ravel() - 0.3
    dz = vals.ravel()
    colors = plt.get_cmap(CMAP_SEQ)(dz / dz.max())
    ax.bar3d(X, Y, np.zeros_like(dz), 0.6, 0.6, dz, color=colors,
             edgecolor="0.4", linewidth=0.2, shade=True)
    ax.set_xticks(plans)
    ax.set_xticklabels(["原状", "方案一", "方案二"])
    ax.set_yticks([0, 1, 2])
    ax.set_yticklabels(["线损率/%", "投资/百万", "效率/%"])
    ax.set_xlabel("方案", labelpad=2)
    ax.set_ylabel("指标", labelpad=2)
    ax.set_zlabel("指标值", labelpad=2)
    ax.view_init(elev=24, azim=-128)
    ax.set_zlim(0, 105)
    save(fig, "20_三维柱状", "20_三维柱状_方案指标对比")

def bar3d_04():
    """各馈线四季负载率三维柱状图。"""
    fig, ax = new_fig3d(left=0.13)
    feeders = np.arange(1, 6)
    seasons = np.arange(4)
    vals = np.array([
        [72, 88, 76, 68],
        [64, 79, 70, 61],
        [81, 96, 84, 74],
        [58, 71, 63, 55],
        [69, 85, 74, 66],
    ])
    X, Y = np.meshgrid(feeders, seasons, indexing="ij")
    X = X.ravel() - 0.3
    Y = Y.ravel() - 0.3
    dz = vals.ravel()
    colors = plt.get_cmap(CMAP_SEQ)(dz / dz.max())
    ax.bar3d(X, Y, np.zeros_like(dz), 0.6, 0.6, dz, color=colors,
             edgecolor="0.4", linewidth=0.2, shade=True)
    ax.set_xticks(feeders)
    ax.set_xticklabels([f"L{i}" for i in feeders])
    ax.set_yticks([0, 1, 2, 3])
    ax.set_yticklabels(["春", "夏", "秋", "冬"])
    ax.set_xlabel("馈线", labelpad=2)
    ax.set_ylabel("季节", labelpad=2)
    ax.set_zlabel("负载率 / %", labelpad=2)
    ax.view_init(elev=23, azim=-125)
    ax.set_zlim(0, 110)
    save(fig, "20_三维柱状", "20_三维柱状_馈线四季负载率")

def bar3d_05():
    """各设备容量五年增长三维柱状图。"""
    fig, ax = new_fig3d(left=0.13)
    years = np.arange(2022, 2027)
    devs = np.arange(4)
    vals = np.array([
        [420, 260, 180, 90],
        [468, 312, 214, 108],
        [512, 386, 268, 132],
        [566, 452, 318, 158],
        [624, 528, 372, 186],
    ])
    X, Y = np.meshgrid(years, devs, indexing="ij")
    X = X.ravel() - 0.3
    Y = Y.ravel() - 0.3
    dz = vals.ravel()
    colors = plt.get_cmap(CMAP_SEQ)(dz / dz.max())
    ax.bar3d(X, Y, np.zeros_like(dz), 0.6, 0.6, dz, color=colors,
             edgecolor="0.4", linewidth=0.2, shade=True)
    ax.set_xticks(years)
    ax.set_xticklabels([str(y) for y in years])
    ax.set_yticks([0, 1, 2, 3])
    ax.set_yticklabels(["光伏", "风电", "储能", "充电桩"])
    ax.set_xlabel("年份", labelpad=2)
    ax.set_ylabel("设备类型", labelpad=2)
    ax.set_zlabel("装机容量 " + IT["S"] + " / MW", labelpad=2)
    ax.view_init(elev=23, azim=-127)
    ax.set_zlim(0, 700)
    save(fig, "20_三维柱状", "20_三维柱状_设备容量增长")

说明

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