• python绘制3D图表


    pyecharts绘制3D图表
    参数配置和说明
    Grid3DOptsAxis3DOpts为3D图标需要配置项
    Grid3DOpts:三位坐标系配置项
    class pyecharts.options.Grid3DOpts

    class Grid3DOpts(
        # 三维笛卡尔坐标系组件在三维场景中的宽度
        width: Numeric = 200,
    
        # 三维笛卡尔坐标系组件在三维场景中的高度。
        height: Numeric = 100,
    
        # 三维笛卡尔坐标系组件在三维场景中的深度。
        depth: Numeric = 80,
    
        # 是否开启视角绕物体的自动旋转查看。
        is_rotate: bool = False,
    
        # 物体自转的速度。单位为角度 / 秒,默认为10 ,也就是 36 秒转一圈。
        rotate_speed: Numeric = 10,
    
        # 旋转操作的灵敏度,值越大越灵敏。支持使用数组分别设置横向和纵向的旋转灵敏度。
        # 设置为0后无法旋转。
        rotate_sensitivity: Numeric = 1,
    )
    

    Axis3DOpts: 三位坐标轴配置项

    class Axis3DOpts(
        data: Optional[Sequence] = None,
    
        # 坐标轴类型。可选:
        # 'value': 数值轴,适用于连续数据。
        # 'category': 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
        # 'time': 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,
        # 例如会根据跨度的范围来决定使用月,星期,日还是小时范围的刻度。
        # 'log' 对数轴。适用于对数数据。
        type_: Optional[str] = None,
    
        # 坐标轴名称。
        name: Optional[str] = None,
    
        # 坐标轴名称与轴线之间的距离,注意是三维空间的距离而非屏幕像素值。
        name_gap: Numeric = 20,
    
        # 坐标轴刻度最小值。
        # 可以设置成特殊值 'dataMin',此时取数据在该轴上的最小值作为最小刻度。
        # 不设置时会自动计算最小值保证坐标轴刻度的均匀分布。
        # 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'。
        # 也可以设置为负数,如 -3)。
        min_: Union[str, Numeric, None] = None,
    
        # 坐标轴刻度最大值。
        # 可以设置成特殊值 'dataMax',此时取数据在该轴上的最大值作为最大刻度。
        # 不设置时会自动计算最大值保证坐标轴刻度的均匀分布。
        # 在类目轴中,也可以设置为类目的序数(如类目轴 data: ['类A', '类B', '类C'] 中,序数 2 表示 '类C'。
        # 也可以设置为负数,如 -3)。
        max_: Union[str, Numeric, None] = None,
    
        # 坐标轴的分割段数,需要注意的是这个分割段数只是个预估值,最后实际显示的段数会在这个
        # 基础上根据分割后坐标轴刻度显示的易读程度作调整。
        # 在类目轴中无效。
        splitnum: Optional[Numeric] = None,
    
        # 强制设置坐标轴分割间隔。
        # 因为 splitNumber 是预估的值,实际根据策略计算出来的刻度可能无法达到想要的效果,
        # 这时候可以使用 interval 配合 min、max 强制设定刻度划分,一般不建议使用。
        # 无法在类目轴中使用。在时间轴(type: 'time')中需要传时间戳,在对数轴(type: 'log')中需要传指数值。
        interval: Optional[Numeric] = None,
        margin: Numeric = 8,
        textstyle_opts: Union[TextStyleOpts, dict, None] = None,
      )
    

    所有3D图表均拥有以下方法

    def add(
        # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
        series_name: str,
    
        # 系列数据
        data: Sequence,
    
        # 三维柱状图中三维图形的着色效果。
        # color:只显示颜色,不受光照等其它因素的影响。
        # lambert:通过经典的 lambert 着色表现光照带来的明暗。
        # realistic:真实感渲染,配合 light.ambientCubemap 和 postEffect 使用可以让展示的画面效果和质感有质的提升。
        # ECharts GL 中使用了基于物理的渲染(PBR) 来表现真实感材质。
        shading: Optional[str] = None,
    
        # 图元配置项,参考 `series_options.ItemStyleOpts`
        itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None
    
        # 标签配置项,参考 `series_options.LabelOpts`
        label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(is_show=False),
    
        # 3D X 坐标轴配置项,参考 `Axis3DOpts`
        xaxis3d_opts: Union[opts.Axis3DOpts, dict] = opts.Axis3DOpts(type_="category"),
    
        # 3D Y 坐标轴配置项,参考 `Axis3DOpts`
        yaxis3d_opts: Union[opts.Axis3DOpts, dict] = opts.Axis3DOpts(type_="category"),
    
        # 3D Z 坐标轴配置项,参考 `Axis3DOpts`
        zaxis3d_opts: Union[opts.Axis3DOpts, dict] = opts.Axis3DOpts(type_="value"),
    
        # 三维笛卡尔坐标系配置项,参考 `Grid3DOpts`
        grid3d_opts: Union[opts.Grid3DOpts, dict] = opts.Grid3DOpts(),
    )
    

    Example:
    绘制3D柱状图
    Bar3D

    import random
    
    from pyecharts import options as opts
    # 导入绘制三维柱状图的库 Bar3D
    from pyecharts.charts import Bar3D
    from pyecharts.faker import Faker
    
    data = [(i, j, random.randint(0, 12)) for i in range(6) for j in range(24)]
    c = (
        Bar3D()
        .add(
            "",
            [[d[1], d[0], d[2]] for d in data],
            xaxis3d_opts=opts.Axis3DOpts(Faker.clock, type_="category"),
            yaxis3d_opts=opts.Axis3DOpts(Faker.week_en, type_="category"),
            zaxis3d_opts=opts.Axis3DOpts(type_="value"),
        )
        .set_global_opts(
            visualmap_opts=opts.VisualMapOpts(max_=20),
            title_opts=opts.TitleOpts(title="Bar3D-基本示例"),
        )
    )
    c.render_notebook()
    

    在这里插入图片描述
    需要说明一下pyecharts.fakter
    Faker数据集是Pyecharts自带的数据集.Pyecharts图标案例中使用的可视化数据来源都源于pyecharts中的faker.py文件.
    Lin3d:3D折线图

    import math
    
    import pyecharts.options as opts
    from pyecharts.charts import Line3D
    
    week_en = "Saturday Friday Thursday Wednesday Tuesday Monday Sunday".split()
    clock = (
        "12a 1a 2a 3a 4a 5a 6a 7a 8a 9a 10a 11a 12p "
        "1p 2p 3p 4p 5p 6p 7p 8p 9p 10p 11p".split()
    )
    
    data = []
    for t in range(0, 25000):
        _t = t / 1000
        x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)
        y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)
        z = _t + 2.0 * math.sin(75 * _t)
        data.append([x, y, z])
    
    c=(
        Line3D()
        .add(
            "",
            data,
            xaxis3d_opts=opts.Axis3DOpts(data=clock, type_="value"),
            yaxis3d_opts=opts.Axis3DOpts(data=week_en, type_="value"),
            grid3d_opts=opts.Grid3DOpts(width=100, height=100, depth=100),
        )
        .set_global_opts(
            visualmap_opts=opts.VisualMapOpts(
                dimension=2,
                max_=30,
                min_=0,
                range_color=[
                    "#313695",
                    "#4575b4",
                    "#74add1",
                    "#abd9e9",
                    "#e0f3f8",
                    "#ffffbf",
                    "#fee090",
                    "#fdae61",
                    "#f46d43",
                    "#d73027",
                    "#a50026",
                ],
            )
        )
    )
    c.render_notebook()
    

    在这里插入图片描述
    3D图还包括
    Surface3D:3D曲面图
    Scatter3D:3D散点图
    Map3D:三维地图等等 还有介绍pyecharts的全局配置项和系列配置项,可以完成一个完成的网页可视化展示 都在官网https://pyecharts.org/#/zh-cn/intro,有不懂的可以留言,或者更好的代码,欢迎大家一起讨论

  • 相关阅读:
    C++编程语言的深度解析: 从零开始的学习路线
    DDIM代码详细解读(3):核心采样代码、超分辨率重建
    【自学开发之旅】Flask-前后端联调-异常标准化返回(六)
    36李沐动手学深度学习v2/图像增广
    服务器监控及其监控工具
    react简易了解
    CAN - 基础
    Java:关于Java和Python你应该知道的区别
    verilog——移位寄存器
    C++--第一个代码hello world
  • 原文地址:https://blog.csdn.net/KIKI_ZSH/article/details/127125001