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

如何利用Pandas DataFrame绘制准确的Matplotlib 3D柱状图?

3D柱状图绘制问题修正方案

原代码存在的问题

  • 未定义变量:row、xposM、yposM直接调用会引发报错
  • 坐标映射错误:y轴应对应每个Item所属的Action类别编码,而非数据集列数
  • Z轴数据错误:dz未正确读取Cost列数据
  • 颜色逻辑混乱:颜色拼接方式不符合分类需求,导致颜色分配错误
  • Z轴范围设置不合理:原数据中存在Cost=4587,但设置zlim(0,4000)会截断最高柱子,显示不准确

修正后的代码

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

# 读取数据集
data = pd.read_csv('datadata.csv')

# 对Action进行编码,映射为y轴坐标
action_codes = {'UK': 0, 'USA': 1, 'China': 2}
data['Action_Code'] = data['Action'].map(action_codes)

# 设置3D柱状图的坐标参数
xpos = np.arange(data.shape[0])  # x轴对应每个Item的索引
ypos = data['Action_Code'].values  # y轴对应每个Item的Action编码
zpos = np.zeros(data.shape[0])  # 柱子底部都在z=0处

dx = 0.5 * np.ones_like(zpos)  # x方向宽度
dy = 0.5 * np.ones_like(zpos)  # y方向宽度,调大一点更美观
dz = data['Cost'].values  # z轴高度对应Cost数值

# 创建画布和3D轴
fig = plt.figure(figsize=(12, 9))
ax = fig.add_subplot(111, projection='3d')

# 根据Action类别分配颜色
cmap_dict = {'UK': cm.Blues, 'USA': cm.Reds, 'China': cm.Greens}
colors = []
for action in data['Action']:
    # 为每个Action生成渐变颜色,取中间值附近的颜色增强辨识度
    color = cmap_dict[action](0.6)
    colors.append(color)

# 绘制3D柱状图
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color=colors, alpha=0.7)

# 设置坐标轴标签
ax.set_xlabel('Item', fontsize=12)
ax.set_ylabel('Action', fontsize=12)
ax.set_zlabel('Cost', fontsize=12)

# 设置坐标轴刻度和标签
ax.set_xticks(xpos + dx/2)  # 让刻度对齐柱子中心
ax.set_xticklabels(data['Item'], rotation=45, ha='right')
ax.set_yticks(np.unique(ypos))
ax.set_yticklabels(action_codes.keys())

# 设置坐标轴范围,Z轴包含最大Cost值
ax.set_xlim(-0.5, data.shape[0]-0.5)
ax.set_ylim(-0.5, 2.5)
ax.set_zlim(0, data['Cost'].max() + 200)  # 留余量避免柱子顶到边界

# 调整视角,提升3D图表可读性
ax.view_init(elev=20., azim=-60)

plt.tight_layout()
plt.show()

修正关键点说明

  • 坐标映射:将Action类别编码为0/1/2,每个Item对应唯一的y轴位置,确保分类准确
  • Z轴数据:直接读取data['Cost'].values作为柱子高度,完全还原原始数据
  • 颜色分配:针对每个Action类别使用专属颜色映射,分类边界清晰
  • 坐标轴优化:调整刻度位置对齐柱子中心,Z轴范围覆盖最大Cost值,避免柱子被截断
  • 视角调整:通过view_init设置合适的仰角和方位角,减少3D图表的视觉遮挡

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:26:13