如何使用Matplotlib绘制多列指标的3D分组投影柱状图
3D柱状图功能调整实现
相邻柱形排布与图例添加
针对同坐标下三个指标的并列展示需求,按以下逻辑调整:
- 给三个指标配置差异化固定颜色:A指标保留原有水蓝色,B指标用橙色,C指标用深红色,保证视觉可区分
- 沿X轴方向给三个指标做等距小幅偏移,配合调整柱体的X/Y方向尺寸,让三个柱在原(R, Users)坐标点处紧密相邻、无重叠遮挡
- 每次绘制柱体时传入对应指标的名称标签,最后调用图例渲染函数自动生成匹配颜色的图例
坐标轴离散刻度固定
为避免Matplotlib自动生成无数据对应的冗余刻度:
- 手动将X轴刻度设置为数据集中R列的实际离散值
[2, 4, 6, 8] - 手动将Y轴刻度设置为数据集中Users列的实际离散值
[80, 400, 1000] - 关闭自动刻度补全逻辑,坐标轴仅展示上述指定的离散值
调整后完整可运行代码
import numpy as np import pandas as pd import matplotlib.pyplot as plt columns = ['R','Users','A','B','C'] df=pd.DataFrame({'R':[2,2,2,4,4,4,6,6,6,8,8], 'Users':[80,400,1000,80,400,1000,80,400,1000,80,400], 'A':[ 0.05381,0.071907,0.08767,0.04493,0.051825,0.05295,0.05285,0.0804,0.0967,0.09864,0.1097], 'B':[0.04287,0.83652,5.49683,0.02604,.045599,2.80836,0.02678,0.32621,1.41399,0.19025,0.2111], 'C':[0.02192,0.16217,0.71645, 0.25314,5.12239,38.92758,1.60807,262.4874,8493,11.6025,6288]}, columns=columns) fig = plt.figure(figsize=(10,7)) ax = plt.axes(projection="3d") # 定义三个指标的绘制配置:颜色、X轴偏移量、图例标签 indicator_configs = [ ("A", "aqua", -0.5, "指标A"), ("B", "orange", 0, "指标B"), ("C", "crimson", 0.5, "指标C") ] # 统一柱体尺寸,保证相邻位置柱体不重叠 x_size = 0.45 y_size = 120 z_base = [0] * len(df) for col_name, color, x_offset, label in indicator_configs: # 计算每个指标对应的X轴位置(原R值加固定偏移) adjusted_x_pos = df["R"] + x_offset ax.bar3d( adjusted_x_pos, df["Users"], z_base, x_size, y_size, df[col_name], color=color, label=label ) # 固定坐标轴为离散实际值,关闭自动补全刻度 ax.set_xticks([2,4,6,8]) ax.set_yticks([80,400,1000]) # 添加轴标签与图例 ax.set_xlabel("R参数值") ax.set_ylabel("用户规模") ax.set_zlabel("指标数值") ax.legend() plt.tight_layout() plt.show()
效果说明
- 每个原(R, Users)坐标点处会横向排列三个不同颜色的柱体,分别对应A、B、C三个指标
- 坐标轴不会自动生成额外刻度,仅展示数据集中实际存在的R值与用户规模值
- 生成的图例与柱体颜色一一对应,可快速区分不同指标
内容的提问来源于stack exchange,提问作者Ruli
相关产品推荐
相关产品推荐

