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 量级的仿真算例,随机种子固定,重跑结果一致。
浙公网安备 33010602011771号