python - 从 3D 列表绘制 3d 条形图

标签 python numpy matplotlib bar-chart

我有一个数据集(包含约 25 个数据点):

x=[2.225  2.325  2.425  2.075  2.375  1.925  1.975  1.775  1.975  2.375]  
y=[147.75  130.25  161.75  147.75  165.25  151.25  158.25  151.25  172.25  123.25]  
z=[-1.36, -0.401, -0.741, -0.623, -0.44, -0.37, 0.120, 2.8, 0.026, -1.19]  

我正在尝试使用数据绘制 3D 条形图。
我正在尝试:

from mpl_toolkits.mplot3d import Axes3D         
fig_3d_bar = plt.figure(figsize=(7, 5))  
dx = fig_3d_bar.add_subplot(111, projection='3d')  

x_pos = np.array(x)  
y_pos = np.array(y)  
z_pos = np.zeros(len(x))    

dx = np.ones(len(x))  
dy = np.ones(len(y))  
dz = z   

dx.bar3d(x_pos, y_pos, z_pos, dx, dy, dz, color='#00ceaa')  

但这给我一个错误报告:

    dx.bar3d(x_pos, y_pos, z_pos, dx, dy, dz, color='#00ceaa')  
AttributeError: 'numpy.ndarray' object has no attribute 'bar3d'  

一点帮助就大有帮助。不知道怎么回事。
谢谢。

最佳答案

您的代码中有错误。您将变量名称 dx 用于 Axes 对象和条形的大小。我猜你想要

ax = fig_3d_bar.add_subplot(111, projection='3d')
ax.bar3d(x_pos, y_pos, z_pos, dx, dy, dz, color='#00ceaa')   

条形大小

由于 x 和 y 数据的比例不同,条形图在图中显得很宽。您可以通过相应地缩放 dxdy 来调整它们。

dx = np.ones(len(x))*0.1
dy = np.ones(len(y))*5

条形颜色

条形的颜色可以通过使用 ScalarMappable 来适应 z 值实例。为此,您需要一个将 z 值缩放到范围 [0,1] 的范数对象。您可以选择任何预定义的 colormaps或创建您自己的。

import matplotlib.colors as cls
import matplotlib.cm as cm

norm = cls.Normalize() # Norm to map the z values to [0,1]
norm.autoscale(z)
cmap = cm.ScalarMappable(norm, 'jet') # Choose any colormap you want

ax.bar3d(x_pos, y_pos, z_pos, dx, dy, dz, color=cmap.to_rgba(z))

关于python - 从 3D 列表绘制 3d 条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30209033/

相关文章:

python - 如何按周和年绘制时间序列数据?

python - 将 '?' 用于对象信息如何工作?

Python - 如何打印特定文本

javascript - Firebase Cloud Functions 运行 Python 脚本

arrays - Numpy:将两个一维数组相加得到一个二维数组

python - 如何在没有for循环的情况下在二维numpy数组中设置多列?

python - Matplotlib_Venn,多个相同比例的维恩图

Python和MySQL编译版本

arrays - 在numpy中获取3D数组的2D切片的平均值

python - 为seaborn的线图中图表下方的区域着色?