plt绘制3D渐变填充柱状图

python 复制代码
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import matplotlib.colors
import numpy as np

def make_bar(ax, x0=0, y0=0, width = 0.5, height=1 , cmap="viridis",
              norm=matplotlib.colors.Normalize(vmin=0, vmax=1), **kwargs ):
    # Make data
    u = np.linspace(0, 2*np.pi, 4+1)+np.pi/4.
    v_ = np.linspace(np.pi/4., 3./4*np.pi, 100)
    v = np.linspace(0, np.pi, len(v_)+2 )
    v[0] = 0 ;  v[-1] = np.pi; v[1:-1] = v_
    x = np.outer(np.cos(u), np.sin(v))
    y = np.outer(np.sin(u), np.sin(v))
    z = np.outer(np.ones(np.size(u)), np.cos(v))

    xthr = np.sin(np.pi/4.)**2 ;  zthr = np.sin(np.pi/4.)
    x[x > xthr] = xthr; x[x < -xthr] = -xthr
    y[y > xthr] = xthr; y[y < -xthr] = -xthr
    z[z > zthr] = zthr  ; z[z < -zthr] = -zthr

    x *= 1./xthr*width; y *= 1./xthr*width
    z += zthr
    z *= height/(2.*zthr)
    #translate
    x += x0; y += y0
    #plot
    ax.plot_surface(x, y, z, cmap=cmap, norm=norm, **kwargs)

def make_bars(ax, x, y, height, width=1):
    widths = np.array(width)*np.ones_like(x)
    x = np.array(x).flatten()
    y = np.array(y).flatten()

    h = np.array(height).flatten()
    w = np.array(widths).flatten()
    norm = matplotlib.colors.Normalize(vmin=0, vmax=h.max())
    for i in range(len(x.flatten())):
        make_bar(ax, x0=x[i], y0=y[i], width = w[i] , height=h[i], norm=norm)

if __name__ == '__main__':
    fig = plt.figure()
    ax = fig.add_subplot(111, projection=Axes3D.name)

    X, Y = np.meshgrid([1,2,3,4], [2,3,4])
    Z = np.array([[90.34,99.9,89.3,87.4],
                  [60.9,80.3,90,78.3],
                  [89.3,87.0,94.4,89.3]])

    make_bars(ax, X, Y, Z, width=0.2)
    plt.show()
相关推荐
zl_vslam13 小时前
SLAM中的非线性优-3D图优化之绝对位姿SE3约束右扰动(十七)
人工智能·算法·计算机视觉·3d
咯哦哦哦哦15 小时前
pick_and_place_with_2d_matching_moving_cam.hdev *眼在手上 2D匹配,3D抓取【案例解析】
计算机视觉·平面·3d
才思喷涌的小书虫18 小时前
打破 3D 感知瓶颈:OVSeg3R 如何推动开集 3D 实例分割应用落地
人工智能·目标检测·计算机视觉·3d·具身智能·数据标注·图像标注
3DVisionary18 小时前
告别传统检具:蓝光3D扫描开启精密模具“数字化质检”新模式
人工智能·3d·数字化转型·质量控制·蓝光3d扫描·精密模具·可溯源
小雨下雨的雨19 小时前
触手可及的微观世界:基于 Flutter 的 3D 血细胞交互教学应用开发
flutter·3d·华为·矩阵·交互·harmonyos·鸿蒙系统
Mangguo520820 小时前
解锁柔性制造新纪元:Raise3D如何重塑工业生产的想象力
3d·制造
jzshmyt20 小时前
3D 布料物理模拟器
3d
众趣科技2 天前
浅谈空间计算技术基础---3D 高斯泼溅
3d·空间计算·高斯泼溅
军军君012 天前
Three.js基础功能学习十一:动画与音频
前端·javascript·3d·js·threejs·三维
CG_MAGIC2 天前
3ds Max 2026 新功能详解:USD 工作流与重新拓扑工具应用
3d·效果图·建模教程·渲云渲染·渲云