python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python三维柱状图

使用Python打造带类别标签的三维柱状图

作者:Code_Verse

带类别标签的三维柱状图是一种在三维空间中展示分类数据的可视化工具,下面小编就来和大家详细介绍一下如何使用Python打造带类别标签的三维柱状图吧

一、带类别标签的三维柱状图介绍

带类别标签的三维柱状图是一种在三维空间中展示分类数据的可视化工具。它不仅能够通过柱子的高度直观地表示数据的大小,还能通过颜色或图例区分不同的类别。这种图表特别适合展示多组数据之间的对比关系,例如不同类别在某个变量上的表现,或者多个类别在不同条件下的差异。

特点

应用场景

二、数据类型准备

在绘制带类别标签的三维柱状图之前,我们需要准备以下几类数据:

在代码中,数据要准备好:

三、代码解释

以下是代码的详细解释,帮助你理解每一步的作用。

导入必要的库

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

设置支持中文的字体

rcParams['font.family'] = 'SimHei'
rcParams['axes.unicode_minus'] = False

这两行代码的作用是让图表支持中文显示,并且正确显示负号。如果不设置,可能会出现中文乱码或负号显示不正常的情况。

数据准备

x = np.arange(1, 11)
y = np.arange(1, 11)
x, y = np.meshgrid(x, y)
z = np.zeros_like(x)
z_height = np.array([[5, 3, 8, 6, 7, 2, 9, 4, 5, 6],
                    [4, 5, 7, 8, 6, 3, 5, 2, 4, 3],
                    [7, 8, 6, 5, 4, 9, 3, 7, 8, 6],
                    [2, 4, 3, 7, 8, 5, 6, 9, 4, 5],
                    [6, 7, 8, 5, 4, 3, 2, 6, 7, 8],
                    [3, 2, 5, 4, 6, 7, 8, 5, 3, 2],
                    [8, 6, 7, 3, 2, 4, 5, 7, 8, 6],
                    [5, 4, 2, 6, 7, 8, 3, 5, 4, 2],
                    [9, 3, 7, 8, 6, 5, 4, 9, 3, 7],
                    [4, 5, 6, 7, 8, 9, 2, 4, 5, 6]])

图形设置

fig = plt.figure(figsize=(10, 8), dpi=100)
ax = fig.add_subplot(111, projection='3d')
ax.view_init(elev=30, azim=135)

颜色映射

norm = plt.Normalize(vmin=np.min(z_height), vmax=np.max(z_height))
cmap = plt.cm.viridis
colors = cmap(norm(z_height.flatten()))

绘制柱子

for i in range(len(x.flatten())):
    ax.bar3d(
        x.flatten()[i], y.flatten()[i], z.flatten()[i],
        0.5, 0.5, z_height.flatten()[i],
        color=colors[i],
        edgecolor='black',
        linewidth=0.3,
        shade=True
    )

坐标轴标签和标题

ax.set_xlabel('变量1', fontsize=12, labelpad=10)
ax.set_ylabel('变量2', fontsize=12, labelpad=10)
ax.set_zlabel('值', fontsize=12, labelpad=10)
ax.set_title('3D柱状图示例', fontsize=14, pad=20)

图例

legend_elements = [plt.Line2D([0], [0], marker='o', color='w', label=f'类别{i+1}',
                              markerfacecolor=colors[i % len(colors)], markersize=10)
                  for i in range(len(np.unique(z_height.flatten())))]
ax.legend(handles=legend_elements, loc='upper left')

网格和背景

ax.grid(True)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False

显示图形

plt.tight_layout()
plt.show()

四、运行代码

将上述代码复制到你的 Python 环境中(比如 Jupyter Notebook 或 PyCharm),运行代码后,你会看到一个三维柱状图。图中的柱子高度表示数据的大小,颜色表示不同的类别,图例会显示每个类别的颜色对应关系,事例如下图:

如果你在运行过程中遇到任何问题,比如报错或显示不正确,可以检查以下几点:

确保安装了 matplotlibnumpy 库。

检查代码中是否有拼写错误。

确保你的 Python 环境支持中文显示。

完整代码如下:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import rcParams
# 设置支持中文的字体为黑体(SimHei)
rcParams['font.family'] = 'SimHei'
rcParams['axes.unicode_minus'] = False  
# 数据准备
x = np.arange(1, 11)
y = np.arange(1, 11)
x, y = np.meshgrid(x, y)
z = np.zeros_like(x)
z_height = np.array([[5, 3, 8, 6, 7, 2, 9, 4, 5, 6],
                    [4, 5, 7, 8, 6, 3, 5, 2, 4, 3],
                    [7, 8, 6, 5, 4, 9, 3, 7, 8, 6],
                    [2, 4, 3, 7, 8, 5, 6, 9, 4, 5],
                    [6, 7, 8, 5, 4, 3, 2, 6, 7, 8],
                    [3, 2, 5, 4, 6, 7, 8, 5, 3, 2],
                    [8, 6, 7, 3, 2, 4, 5, 7, 8, 6],
                    [5, 4, 2, 6, 7, 8, 3, 5, 4, 2],
                    [9, 3, 7, 8, 6, 5, 4, 9, 3, 7],
                    [4, 5, 6, 7, 8, 9, 2, 4, 5, 6]])
# 图形设置
fig = plt.figure(figsize=(10, 8), dpi=100)
ax = fig.add_subplot(111, projection='3d')
ax.view_init(elev=30, azim=135)  # 更佳视角
# 颜色映射
norm = plt.Normalize(vmin=np.min(z_height), vmax=np.max(z_height))
cmap = plt.cm.viridis  
colors = cmap(norm(z_height.flatten()))
# 绘制柱子
for i in range(len(x.flatten())):
    ax.bar3d(
        x.flatten()[i], y.flatten()[i], z.flatten()[i],
        0.5, 0.5, z_height.flatten()[i],  
        color=colors[i],
        edgecolor='black', 
        linewidth=0.3,
        shade=True
    )
# 坐标轴标签
ax.set_xlabel('变量1', fontsize=12, labelpad=10)
ax.set_ylabel('变量2', fontsize=12, labelpad=10)
ax.set_zlabel('值', fontsize=12, labelpad=10)
# 标题
ax.set_title('3D柱状图示例', fontsize=14, pad=20)
# 图例
legend_elements = [plt.Line2D([0], [0], marker='o', color='w', label=f'类别{i+1}',
                              markerfacecolor=colors[i % len(colors)], markersize=10)
                  for i in range(len(np.unique(z_height.flatten())))]
ax.legend(handles=legend_elements, loc='upper left')
# 网格和背景
ax.grid(True)
ax.xaxis.pane.fill = False
ax.yaxis.pane.fill = False
ax.zaxis.pane.fill = False

plt.tight_layout()
plt.show()

五、总结

通过本教程,你学会了如何使用 Python 绘制带类别标签的三维柱状图。我们从数据准备开始,逐步介绍了如何设置图形、绘制柱子、添加标签和图例,并最终生成了一个酷炫的三维柱状图。这种图表非常适合展示多变量数据之间的关系,尤其是当你需要对数据进行分类标注时。

如果你对三维柱状图有更多想法或需求,比如添加动画效果、调整颜色映射等,可以继续探索 matplotlib 的强大功能。

到此这篇关于使用Python打造带类别标签的三维柱状图的文章就介绍到这了,更多相关Python三维柱状图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文