【问题标题】:plotting 3d barchart from a 3D list从 3D 列表中绘制 3d 条形图
【发布时间】:2015-05-13 08:02:39
【问题描述】:

我有一个数据集(包含约 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'  

一点帮助会很有帮助。不知道怎么回事。
谢谢。

【问题讨论】:

    标签: python numpy matplotlib bar-chart


    【解决方案1】:

    您的代码中有错误。您将变量名称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))
    

    【讨论】:

    • 天哪!我太迷失在我的代码中没有注意到..感谢您的指点。
    • 3D 矩形变得非常宽,我怎样才能让它们变小?
    • 我可以根据高度强度改变条的颜色吗?
    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-06
    相关资源
    最近更新 更多