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

如何使用Python绘制3D直方图展示不同条件B下属性A的频数分布

Python 3D直方图绘制方案

依赖安装

首先安装需要的第三方库:

pip install numpy matplotlib

实现代码

你只需要替换代码中B_values和A_data_list为你的实际实验数据即可直接运行:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# ---------------------- 替换为你的真实数据 ----------------------
# 所有条件B的取值,和示例中的温度值对应
B_values = [200, 250, 300, 350, 400]
# 每个B值对应的属性A的原始采集数据,顺序和B_values一一对应
# 此处为模拟数据,直接替换为你的实验数据即可
A_data_list = []
for b in B_values:
    # 模拟随B值变化的A数据,演示用
    A_data = np.random.normal(loc=b*0.02, scale=0.5, size=1000)
    A_data_list.append(A_data)
# 属性A的统计区间,可根据你的A的实际取值范围调整bins数量
A_bins = np.linspace(-2, 4, 30)
# --------------------------------------------------------------

fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(111, projection='3d')

# 遍历所有B值对应的数据绘制直方图
for z_idx, (b_val, a_data) in enumerate(zip(B_values, A_data_list)):
    # 计算A数据的直方图频数
    hist, bin_edges = np.histogram(a_data, bins=A_bins)
    # 取区间中点作为x轴坐标
    x_coords = (bin_edges[:-1] + bin_edges[1:]) / 2
    # 沿z轴排布不同B的直方图
    ax.bar(
        x=x_coords,
        height=hist,
        zs=z_idx,
        zdir='z',
        alpha=0.7,
        width=np.diff(A_bins)[0] * 0.8
    )

# 设置坐标轴信息
ax.set_xlabel('属性A')
ax.set_ylabel('频数')
ax.set_zlabel('条件B')
# 把z轴刻度替换为实际的B值
ax.set_zticks(range(len(B_values)))
ax.set_zticklabels(B_values)

# 调整观察视角,可自行修改参数调整角度
ax.view_init(elev=30, azim=-60)
plt.tight_layout()
plt.show()

自定义调整说明

  • 可修改ax.bar中的alpha参数调整条形透明度,传入color参数为不同B的直方图设置区分色
  • 调整view_init的elev和azim参数可以修改3D图的观察角度
  • 修改A_bins的区间和数量可以调整直方图的统计精度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 13:45:03