当python遇上echarts (三)绘制3D图表

当python遇上echarts (二)绘制基本图表


前言

pyecharts为我们提供了很多种3D图的模板,包括Bar3D(3D柱状图),Line3D(3D折线图),Scatter3D(3D散点图),Surface3D(3D曲面图),Map3D(三维地图)

3D图形配置项及方法

绘制3d图形共有的配置项:Grid3DOpts,Axis3DOpts

Grid3DOpts:三维笛卡尔坐标系配置项

class Grid3DOpts(
    # 三维笛卡尔坐标系组件在三维场景中的宽度,即x轴的长度。
    width: Numeric = 200,
    # 三维笛卡尔坐标系组件在三维场景中的高度,即z轴的长度。
    height: Numeric = 100,
    # 三维笛卡尔坐标系组件在三维场景中的深度,即y轴的长度。
    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,
)

add(): 共有的方法

def add(
    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,
    # 系列数据,传入列表嵌套的那项数据。
    data: Sequence,
    # 三维柱状图中三维图形的着色效果。
    # color:只显示颜色,不受光照等其它因素的影响。
    # lambert:通过经典的 lambert 着色表现光照带来的明暗。
    # realistic:真实感渲染,配合 light.ambientCubemap 和 postEffect 使用可以让展示的画面效果和质感有质的提升。
    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(),
)

了解完3d图配置项,那接下来做图就很简单了,毕竟,在pyecharts中,一切皆options!!!

一、3D柱状图

1、导入模块

#导入配置项
from pyecharts import options as opts
#导入Bar3D类,绘制3D柱状图
from pyecharts.charts import Bar3D
#导入图表主题
from pyecharts.globals import ThemeType
#random模块,用于产生数据
import random

2、需要的数据类型

Bar3D需要的数据类型:
x轴:列表,可以是数值[1,2,3],也可以是类目轴的名称[Mon,Tue,Wed]
y轴:列表;同x轴
z轴:列表的嵌套

x_data = [i for i in range(0,13)] #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
y_data = [j for j in range(0,14)] #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
#[[0, 0, 323], [0, 1, 409], [0, 2, 254], [0, 3, 327], [0, 4, 270], [0, 5, 285], [0, 6, 333], [0, 7, 325], [0, 8, 506]]
z_data = [[i,j,random.randint(250,520)] for i in range(13) for j in range(14)] 

也可以是类目轴,比如

x_data = ["12a","1a","2a","3a","4a","5a","6a","7a","8a","9a","10a","11a","12p","1p","2p","3p","4p","5p","6p","7p","8p","9p","10p","11p"]
y_data = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]

在pyecharts中共有四种类型的坐标轴

  • ‘value’: 数值轴,适用于连续数据。
  • ‘category’: 类目轴,适用于离散的类目数据,为该类型时必须通过 data 设置类目数据。
  • ‘time’: 时间轴,适用于连续的时序数据,与数值轴相比时间轴带有时间的格式化,在刻度计算上也有所不同,
  • ‘log’ 对数轴。适用于对数数据。

3、配置项和方法

在pyecharts中参数一般都有默认值,很多都是可选参数,根据自己的需要,为表格添加参数

(1)init_opts 初始化配置项

在实例化3d柱状图对象的时候加入该配置项,具体初始化配置项中有哪些参数可以参照当python遇上echarts(一)了解基本知识,或者pyecharts官方网站

bar3d = Bar3D(
	init_opts=opts.InitOpts(
        width = '800px', #图表宽度
        height = '600px', #图表高度
        page_title = '3D柱状图', #网页标题
        #theme = ThemeType.ROMANTIC ,
        bg_color = '#FFB6C1',
        #在绘制3d柱状图时,不仅需要echarts.min.js,还需要echarts-gl.min.js,若要设置此参数,需要将echarts-gl.min.js一起放入文件夹中
        js_host = 'js/',
    )
)     

拓展:查看并下载需要的js文件。
在开发者选项的network中找到请求的资源,然后右键将其下载到本地,再添加js_host参数,之后就可以离线使用图表了。
在这里插入图片描述

(2)使用add方法添加数据和options

bar3d.add(
        series_name = '随机数',
        #传入数据值的那一项数据
        data = z_data,
        shading='lambert',
        label_opts=opts.LabelOpts(
            is_show=True
            ),
        xaxis3d_opts=opts.Axis3DOpts(type_ = 'value',name = 'x轴'),
        yaxis3d_opts=opts.Axis3DOpts(type_ = 'value',name = 'y轴'),
        zaxis3d_opts=opts.Axis3DOpts(type_ = 'value',name = 'z轴',min_ = 250),
        grid3d_opts=opts.Grid3DOpts(
            width=100, #x轴长度
            height = 100, #z轴长度
            depth = 80, #y轴长度
            #is_rotate=True, #是否开启自动旋转
            )
    )

(3)设置其他配置项

    bar3d.set_global_opts(
        title_opts=opts.TitleOpts(title = '3D柱状图'),
        #视觉映射配置项,配置图形的颜色过渡
        visualmap_opts=opts.VisualMapOpts(
            is_show=True,
            type_ = 'color',
            is_piecewise=True,
            split_number=6,
            range_color=['red','orange','yellow','green','blue','purple'],
            min_ = 250,
            max_ = 520
            ),
        #tooltip_opts=opts.TooltipOpts(is_show=True)    
        )

4、生成html文件

bar3d = set_bar3d()
bar3d.render('3d柱状图csdn文章.html')

5、完整代码

from pyecharts import options as opts
#导入Bar3D类,绘制3D柱状图
from pyecharts.charts import Bar3D
from pyecharts.globals import ThemeType
import random

#Bar3D需要的数据类型:x轴:列表;y轴:列表;z轴:列表的嵌套(一般设置z轴显示数值)

x_data = [i for i in range(0,13)] #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 
y_data = [j for j in range(0,14)] #[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]
#z轴数据格式[[0, 0, 323], [0, 1, 409], [0, 2, 254], [0, 3, 327], [0, 4, 270], [0, 5, 285], [0, 6, 333], [0, 7, 325], [0, 8, 506]]
z_data = [[i,j,random.randint(250,520)] for i in range(13) for j in range(14)] 

def set_bar3d():
    bar3d = Bar3D(
        #参照第一节里面的InitOpts
        init_opts=opts.InitOpts(
            #图表宽度
            width = '800px',
            #图表高度
            height = '600px',
            #网页标题
            page_title = '3D柱状图',
            #图表主题,有好多种主题,from pyecharts.globals import ThemeType
            #LIGHT,DARK,CHALK,INFOGRAPHIC,ESSOS,MACARONS,PURPLE_PASSION,ROMA,ROMANTIC,SHINE,VINTAGE,WALDEN,WESTEROS
            #theme = ThemeType.ROMANTIC ,
            #背景颜色,可以用颜色的单词,可以用16进制的颜色码(浅粉色,#FFB6C1),也可以用RGB颜色表示rgb(255,182,193)
            bg_color = '#FFB6C1',
            #远程 js host,如不设置默认为 https://assets.pyecharts.org/assets/"
            #如果想要在不联网的情况下展示图表,需将echarts.min.js下载至本地。然后传入其路径
            #在绘制3d柱状图时,不仅需要echarts.min.js,还需要echarts-gl.min.js,若要设置此参数,需要将echarts-gl.min.js一起放入文件夹中
            #js_host = 'js/',
            #  
        )
    )
    bar3d.add(
        series_name = '随机数',
        data = z_data,
        shading='lambert',
        label_opts=opts.LabelOpts(
            is_show=True
            ),
        xaxis3d_opts=opts.Axis3DOpts(type_ = 'value',name = 'x轴'),
        yaxis3d_opts=opts.Axis3DOpts(type_ = 'value',name = 'y轴'),
        zaxis3d_opts=opts.Axis3DOpts(type_ = 'value',name = 'z轴',min_ = 250),
        grid3d_opts=opts.Grid3DOpts(
            width=100, #x轴长度
            height = 100, #z轴长度
            depth = 80, #y轴长度
            #is_rotate=True, #是否开启自动旋转
            )
    )
    bar3d.set_global_opts(
        title_opts=opts.TitleOpts(title = '3D柱状图'),
        #视觉映射配置项,配置图形的颜色过渡
        visualmap_opts=opts.VisualMapOpts(
            is_show=True,
            type_ = 'color',
            is_piecewise=True,
            split_number=6,
            range_color=['red','orange','yellow','green','blue','purple'],
            min_ = 250,
            max_ = 520
            ),
        #tooltip_opts=opts.TooltipOpts(is_show=True)    
        )
    return bar3d

bar3d = set_bar3d()
bar3d.render('3d柱状图csdn文章.html')

6、图表展示

在这里插入图片描述

二、三维地图 Map3D

1、导入模块

from pyecharts.charts import Map3D
from pyecharts.globals import ChartType

2、需要数据类型

(坐标点名称,坐标点值)
坐标点值列表中[经度,纬度,数值]

example_data = [
    ("黑龙江", [127.9688, 45.368, 100]),
    ("内蒙古", [110.3467, 41.4899, 400]),
    ("吉林", [125.8154, 44.2584, 700]),
    ("辽宁", [123.1238, 42.1216, 500]),
    ("河北", [114.4995, 38.1006, 335]),
    ("天津", [117.4219, 39.4189, 300]),
    ("山西", [112.3352, 37.9413, 370]),
    ("陕西", [109.1162, 34.2004, 670]),
    ("甘肃", [103.5901, 36.3043, 570]),
    ("宁夏", [106.3586, 38.1775, 300]),
    ("青海", [101.4038, 36.8207, 300]),
    ("新疆", [87.9236, 43.5883, 300]),
    ("西藏", [91.11, 29.97, 300]),
    ("四川", [103.9526, 30.7617, 300]),
    ("重庆", [108.384366, 30.439702, 300]),
    ("山东", [117.1582, 36.8701, 300]),
    ("河南", [113.4668, 34.6234, 300]),
    ("江苏", [118.8062, 31.9208, 300]),
    ("安徽", [117.29, 32.0581, 300]),
    ("湖北", [114.3896, 30.6628, 900]),
    ("浙江", [119.5313, 29.8773, 300]),
    ("福建", [119.4543, 25.9222, 308]),
    ("江西", [116.0046, 28.6633, 300]),
    ("湖南", [113.0823, 28.2568, 300]),
    ("贵州", [106.6992, 26.7682, 900]),
    ("广西", [108.479, 23.1152, 300]),
    ("海南", [110.3893, 19.8516, 300]),
    ("上海", [121.4648, 31.2891, 1300]),
]

3、配置项和方法

(1)初始化配置项 init_opts

配置方法及参数与其他图相同

    map3d = Map3D(init_opts=opts.InitOpts(width='1200px',height='700px'))

(2)add()方法

def add(
    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,
    # 数据项 (坐标点名称,坐标点值)
    data_pair: types.Sequence,
    # 叠加图的类型(目前只支持 Bar3D,Line3D,Lines3D,Scatter3D)
    type_: ChartType = None,
    # 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
    #在python安装路径中的Lib\site-packages\pyecharts\datasets\map_filename.json
    maptype: str = "china",
    # 仅在 bar3D 下起作用
    # 设置柱子的大小
    bar_size: types.Optional[types.Numeric] = None,
    # 柱子的倒角尺寸。支持设置为从 0 到 1 的值。默认为 0,即没有倒角。
    bevel_size: types.Numeric = 0,
    # 柱子倒角的光滑/圆润度,数值越大越光滑/圆润。
    bevel_smoothness: types.Numeric = 2,
    # 最小柱子高度。
    min_height: types.Numeric = 2,
    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: types.Tooltip = None,
    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: types.ItemStyle = None,
    # 高亮标签配置项,参考 `series_options.LabelOpts`
    emphasis_label_opts: types.Label = None,
    # 高亮图元样式配置项,参考 `series_options.ItemStyleOpts`
    emphasis_itemstyle_opts: types.ItemStyle = None,
    # 三维地图中三维图形的着色效果。echarts-gl 中支持下面三种着色方式:
    # color: 只显示颜色,不受光照等其它因素的影响。
    # lambert: 通过经典的 lambert 着色表现光照带来的明暗。
    # realistic: 真实感渲染,配合 light.ambientCubemap 和 postEffect 使用可以让展示的画面效果和质感有质的提升。
    # ECharts GL 中使用了基于物理的渲染(PBR) 来表现真实感材质。
    shading: types.Optional[str] = None,
    # 真实感材质相关的配置项,在 shading 为'realistic'时有效。
    realistic_material_opts: types.Optional[types.Map3DRealisticMaterial] = None,
    # lambert 材质相关的配置项,在 shading 为'lambert'时有效。
    lambert_material_opts: types.Optional[types.Map3DLambertMaterial] = None,
    # color 材质相关的配置项,在 shading 为'color'时有效。
    color_material_opts: types.Optional[types.Map3DColorMaterial] = None,
    # 图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件。
    is_silent: bool = False,
    # 是否开启动画。
    is_animation: bool = True,
    # 过渡动画的时长。
    animation_duration_update: types.Numeric = 100,
    # 过渡动画的缓动效果。
    animation_easing_update: types.Numeric = "cubicOut",
):

示例如下:

    map3d.add(
        series_name = '旅游人数',
        data_pair = example_data,
        #叠加图的类型
        type_ = ChartType.BAR3D,
        maptype='china',
        #控制柱状图的图元样式
        itemstyle_opts=opts.ItemStyleOpts(
            color = '#FF0033',
            #设置柱子的透明度,支持从 0 到 1 的数字,为 0 时不绘制该图形
            #opacity=1
        ),
        #设置柱子的标签
        label_opts=opts.LabelOpts(
            is_show=True,
            #设置标签的内容(标签内容格式器),支持字符串模板和回调函数
            # # 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值)
            #formatter='{b}{c}',字符串模板
            #回调函数,需要先引入JsCode,from pyecharts.commons.utils import JsCode
            #不论时字符串还是回调函数都支持\n,\t,但是需要用双斜杠表示
            formatter=JsCode("function(data){return data.name +'\\n'+ data.value[2];}")
        ),
        #配置选中柱子的标签
        emphasis_label_opts=opts.LabelOpts(
            is_show=True
        ),
        #设置选中的柱子的图元样式
        emphasis_itemstyle_opts=opts.ItemStyleOpts(
            color='#33FF00'
        )
    )

(3) add_schema()方法 —(添加底层地图的相关配置)

def add_schema(
    # 地图类型,具体参考 pyecharts.datasets.map_filenames.json 文件
    #在python安装路径中的Lib\site-packages\pyecharts\datasets\map_filename.json
    maptype: str = "china",
    # 名称
    name: types.Optional[str] = None,
    # 三维地理坐标系组件在三维场景中的参数。
    # 具体图示在此: https://www.echartsjs.com/zh/documents/asset/gl/img/geo-size.png
    box_width: types.Optional[types.Numeric] = 100, #(x轴的长度)
    box_height: types.Optional[types.Numeric] = 10, #(z轴的长度)
    box_depth: types.Optional[types.Numeric] = None, #(y轴的长度)
    #底层地图的厚度
    region_height: types.Optional[types.Numeric] = 3,
    # 是否显示地面,地面可以让整个组件有个“摆放”的地方,从而使整个场景看起来更真实,更有模型感。
    is_show_ground: bool = False,
    # 地面颜色。
    ground_color: str = "#aaa",
    # Map3D 的 Label 设置
    map3d_label: types.Map3DLabel = None,
    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: types.ItemStyle = None,
    # 高亮标签配置项,参考 `series_options.LabelOpts`
    emphasis_label_opts: types.Label = None,
    # 高亮图元样式配置项,参考 `series_options.ItemStyleOpts`
    emphasis_itemstyle_opts: types.ItemStyle = None,
    # 三维地理坐标系组件中三维图形的着色效果。echarts-gl 中支持下面三种着色方式:
    # color: 只显示颜色,不受光照等其它因素的影响。
    # lambert: 通过经典的 lambert 着色表现光照带来的明暗。
    # realistic: 真实感渲染,配合 light.ambientCubemap 和 postEffect 使用可以让展示的画面效果和质感有质的提升。
    # ECharts GL 中使用了基于物理的渲染(PBR) 来表现真实感材质。
    shading: types.Optional[str] = None,
    # 真实感材质相关的配置项,在 shading 为'realistic'时有效。
    realistic_material_opts: types.Optional[types.Map3DRealisticMaterial] = None,
    # lambert 材质相关的配置项,在 shading 为'lambert'时有效。
    lambert_material_opts: types.Optional[types.Map3DLambertMaterial] = None,
    # color 材质相关的配置项,在 shading 为'color'时有效。
    color_material_opts: types.Optional[types.Map3DColorMaterial] = None,
    # 光照相关的设置。在 shading 为 'color' 的时候无效。
    # 光照的设置会影响到组件以及组件所在坐标系上的所有图表。
    # 合理的光照设置能够让整个场景的明暗变得更丰富,更有层次。
    light_opts: types.Optional[types.Map3DLight] = None,
    # viewControl用于鼠标的旋转,缩放等视角控制。
    view_control_opts: types.Optional[types.Map3DViewControl] = None,
    # 组件的视图离容器左侧的距离。
    # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'left', 'center', 'right'。
    # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
    pos_left: types.Union[types.Numeric, str] = "auto",
    # 组件的视图离容器上侧的距离。
    pos_top: types.Union[types.Numeric, str] = "auto",
    # 组件的视图离容器右侧的距离。
    pos_right: types.Union[types.Numeric, str] = "auto",
    # 组件的视图离容器下侧的距离。
    pos_bottom: types.Union[types.Numeric, str] = "auto",
    # 组件的视图宽度。
    pos_width: types.Union[types.Numeric, str] = "auto",
    # 组件的视图高度。
    pos_height: types.Union[types.Numeric, str] = "auto",
)

示例如下:

    map3d.add_schema(
        maptype='china',
        #底层地图的厚度
        region_height=4,
        is_show_ground=True,
        itemstyle_opts=opts.ItemStyleOpts(
            #底层地图的颜色
            color = 'blue',
            #图形的描边颜色,即地图中区域分界线的颜色
            border_color='yellow',
            #分界线的类型,'dashed', 'dotted'
            border_type='dashed',
            #分界线的宽度
            border_width=1
        ),
        #设置底层地图的label,
        emphasis_label_opts=opts.LabelOpts(
            #设置选中高亮区域不显示标签
            is_show=False
        ),
        #设置高亮区域的图元样式
        emphasis_itemstyle_opts=opts.ItemStyleOpts(
            #设置选中区域显示为绿色
            color = 'green'
        ),
        shading='lambert',
        #设置光照,显示阴影
        light_opts=opts.Map3DLightOpts(
            #主光源的颜色
            main_color='#FFFFCC',
            # 主光源是否投射阴影。默认为关闭。
            # 开启阴影可以给场景带来更真实和有层次的光照效果。但是同时也会增加程序的运行开销。
            is_main_shadow =  True
        )
    )

(4)其他配置项

    map3d.set_global_opts(
        title_opts=opts.TitleOpts(title='三维地图叠加柱状图'),
        #视觉映射配置项,设置颜色过渡
        visualmap_opts=opts.VisualMapOpts(
            is_show=True,
            type_='color',
            min_ = 100,
            max_ = 1300,
            range_color=['red','orange','yellow','green','blue','purple'],
            is_piecewise=True
        )
    )

拓展:VisualMapOpts(视觉映射配置项)

class VisualMapOpts(
    # 是否显示视觉映射配置
    is_show: bool = True,
    # 映射过渡类型,可选,"color", "size"
    type_: str = "color",
    # 指定 visualMapPiecewise 组件的最小值。
    min_: Union[int, float] = 0,
    # 指定 visualMapPiecewise 组件的最大值。
    max_: Union[int, float] = 100,
    # 两端的文本,如['High', 'Low']。
    range_text: Union[list, tuple] = None,
    # visualMap 组件过渡颜色
    range_color: Union[Sequence[str]] = None,
    # visualMap 组件过渡 symbol 大小
    range_size: Union[Sequence[int]] = None,
    # visualMap 图元以及其附属物(如文字标签)的透明度。
    range_opacity: Optional[Numeric] = None,
    # 如何放置 visualMap 组件,水平('horizontal')或者竖直('vertical')。
    orient: str = "vertical",
    # visualMap 组件离容器左侧的距离。
    # left 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'left', 'center', 'right'。
    # 如果 left 的值为'left', 'center', 'right',组件会根据相应的位置自动对齐。
    pos_left: Optional[str] = None,
    # visualMap 组件离容器右侧的距离。
    # right 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_right: Optional[str] = None,
    # visualMap 组件离容器上侧的距离。
    # top 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比,
    # 也可以是 'top', 'middle', 'bottom'。
    # 如果 top 的值为'top', 'middle', 'bottom',组件会根据相应的位置自动对齐。
    pos_top: Optional[str] = None,
    # visualMap 组件离容器下侧的距离。
    # bottom 的值可以是像 20 这样的具体像素值,可以是像 '20%' 这样相对于容器高宽的百分比。
    pos_bottom: Optional[str] = None,
    # 对于连续型数据,自动平均切分成几段。默认为5段。连续数据的范围需要 max 和 min 来指定
    split_number: int = 5,
    # 指定取哪个系列的数据,默认取所有系列。
    series_index: Union[Numeric, Sequence, None] = None,
    # 组件映射维度
    dimension: Optional[Numeric] = None,
    # 是否显示拖拽用的手柄(手柄能拖拽调整选中范围)。
    is_calculable: bool = True,
    # 是否为分段型
    is_piecewise: bool = False,
    # 是否反转 visualMap 组件
    is_inverse: bool = False,
    # 数据展示的小数精度。
    # 连续型数据平均分段,精度根据数据自动适应。
    # 连续型数据自定义分段或离散数据根据类别分段模式,精度默认为0(没有小数)。
    precision: Optional[int] = None,
    # 自定义的每一段的范围,以及每一段的文字,以及每一段的特别的样式。例如:
    # pieces: [
    #   {"min": 1500}, // 不指定 max,表示 max 为无限大(Infinity)。
    #   {"min": 900, "max": 1500},
    #   {"min": 310, "max": 1000},
    #   {"min": 200, "max": 300},
    #   {"min": 10, "max": 200, "label": '10 到 200(自定义label)'},
    #   {"value": 123, "label": '123(自定义特殊颜色)', "color": 'grey'}, //表示 value 等于 123 的情况
    #   {"max": 5}     // 不指定 min,表示 min 为无限大(-Infinity)。
    # ]
    pieces: Optional[Sequence] = None,
    # 定义 在选中范围外 的视觉元素。(用户可以和 visualMap 组件交互,用鼠标或触摸选择范围)
    #  可选的视觉元素有:
    #  symbol: 图元的图形类别。
    #  symbolSize: 图元的大小。
    #  color: 图元的颜色。
    #  colorAlpha: 图元的颜色的透明度。
    #  opacity: 图元以及其附属物(如文字标签)的透明度。
    #  colorLightness: 颜色的明暗度,参见 HSL。
    #  colorSaturation: 颜色的饱和度,参见 HSL。
    #  colorHue: 颜色的色调,参见 HSL。
    out_of_range: Optional[Sequence] = None,
    # 图形的宽度,即长条的宽度。
    item_width: int = 0,
    # 图形的高度,即长条的高度。
    item_height: int = 0,
    # visualMap 组件的背景色。
    background_color: Optional[str] = None,
    # visualMap 组件的边框颜色。
    border_color: Optional[str] = None,
    # visualMap 边框线宽,单位px。
    border_width: int = 0,
    # 文字样式配置项,参考 `series_options.TextStyleOpts`
    textstyle_opts: Union[TextStyleOpts, dict, None] = None,
)

4、生成html文件

map3d = set_map3d()
map3d.render('map3d_csdn文章.html')

5、完整代码

from pyecharts import options as opts
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType
from pyecharts.commons.utils import JsCode

#(坐标点名称,坐标点值),坐标点值列表中[经度,纬度,数值]
example_data = [
    ("黑龙江", [127.9688, 45.368, 100]),
    ("内蒙古", [110.3467, 41.4899, 400]),
    ("吉林", [125.8154, 44.2584, 700]),
    ("辽宁", [123.1238, 42.1216, 500]),
    ("河北", [114.4995, 38.1006, 335]),
    ("天津", [117.4219, 39.4189, 300]),
    ("山西", [112.3352, 37.9413, 370]),
    ("陕西", [109.1162, 34.2004, 670]),
    ("甘肃", [103.5901, 36.3043, 570]),
    ("宁夏", [106.3586, 38.1775, 300]),
    ("青海", [101.4038, 36.8207, 300]),
    ("新疆", [87.9236, 43.5883, 300]),
    ("西藏", [91.11, 29.97, 300]),
    ("四川", [103.9526, 30.7617, 300]),
    ("重庆", [108.384366, 30.439702, 300]),
    ("山东", [117.1582, 36.8701, 300]),
    ("河南", [113.4668, 34.6234, 300]),
    ("江苏", [118.8062, 31.9208, 300]),
    ("安徽", [117.29, 32.0581, 300]),
    ("湖北", [114.3896, 30.6628, 900]),
    ("浙江", [119.5313, 29.8773, 300]),
    ("福建", [119.4543, 25.9222, 308]),
    ("江西", [116.0046, 28.6633, 300]),
    ("湖南", [113.0823, 28.2568, 300]),
    ("贵州", [106.6992, 26.7682, 900]),
    ("广西", [108.479, 23.1152, 300]),
    ("海南", [110.3893, 19.8516, 300]),
    ("上海", [121.4648, 31.2891, 1300]),
]

def set_map3d():
    map3d = Map3D(init_opts=opts.InitOpts(width='1200px',height='700px'))
    map3d.add(
        series_name = '旅游人数',
        data_pair = example_data,
        #叠加图的类型
        type_ = ChartType.BAR3D,
        maptype='china',
        #控制柱状图的图元样式
        itemstyle_opts=opts.ItemStyleOpts(
            color = '#FF0033',
            #设置柱子的透明度,支持从 0 到 1 的数字,为 0 时不绘制该图形
            #opacity=1
        ),
        #设置柱子的标签
        label_opts=opts.LabelOpts(
            is_show=True,
            #设置标签的内容(标签内容格式器),支持字符串模板和回调函数
            # # 地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值)
            #formatter='{b}{c}',字符串模板
            #回调函数,需要先引入JsCode,from pyecharts.commons.utils import JsCode
            #不论时字符串还是回调函数都支持\n,\t,但是需要用双斜杠表示
            formatter=JsCode("function(data){return data.name +'\\n'+ data.value[2];}")
        ),
        #配置选中柱子的标签
        emphasis_label_opts=opts.LabelOpts(
            is_show=True
        ),
        #设置选中的柱子的图元样式
        emphasis_itemstyle_opts=opts.ItemStyleOpts(
            color='#33FF00'
        )
    )
    #添加底层地图
    map3d.add_schema(
        maptype='china',
        #底层地图的厚度
        region_height=4,
        is_show_ground=True,
        itemstyle_opts=opts.ItemStyleOpts(
            #底层地图的颜色
            color = 'blue',
            #图形的描边颜色,即地图中区域分界线的颜色
            border_color='yellow',
            #分界线的类型,'dashed', 'dotted'
            border_type='dashed',
            #分界线的宽度
            border_width=1
        ),
        #设置底层地图的label,
        emphasis_label_opts=opts.LabelOpts(
            #设置选中高亮区域不显示标签
            is_show=False
        ),
        #设置高亮区域的图元样式
        emphasis_itemstyle_opts=opts.ItemStyleOpts(
            #设置选中区域显示为绿色
            color = 'green'
        ),
        shading='lambert',
        #设置光照,显示阴影
        light_opts=opts.Map3DLightOpts(
            #主光源的颜色
            main_color='#FFFFCC',
            # 主光源是否投射阴影。默认为关闭。
            # 开启阴影可以给场景带来更真实和有层次的光照效果。但是同时也会增加程序的运行开销。
            is_main_shadow =  True
        )
    )
    map3d.set_global_opts(
        title_opts=opts.TitleOpts(title='三维地图叠加柱状图'),
        #视觉映射配置项,设置颜色过渡
        visualmap_opts=opts.VisualMapOpts(
            is_show=True,
            type_='color',
            min_ = 100,
            max_ = 1300,
            range_color=['red','orange','yellow','green','blue','purple'],
            is_piecewise=True
        )
    )
    return map3d

map3d = set_map3d()
map3d.render('map3d_csdn文章.html')

6、图表展示

在这里插入图片描述

页面组件和分页组件

生成的html中,只有一个图表,要想一个页面中展示多个图表,就需要用到页面组件Page分页组件Tab

1、页面组件

页面组件有3种组合形式:

  1. SimplePageLayout
  2. DraggablePageLayout;
  3. DefaultLayout(不设置layout参数,就是默认的DefaultLayout)

DraggablePageLayout中,可以任意拖动图表,得到想要的布局。

from pyecharts.charts import Page
page = Page(
    page_title='页面组件',
    interval=10,
    #设置引用的js文件
    #js_host=''
    #3中组合形式:SimplePageLayout;DraggablePageLayout;DefaultLayout(不设置layout参数,就是默认的DefaultLayout)
    layout=Page.SimplePageLayout
)
#add方法传入各种图的实例化对象
page.add(
    set_map3d(),
    set_bar3d()
)
#生成html
page.render('csdn文章layout.html')

在这里插入图片描述

2、分页组件

tab类的add()方法需传入两个参数

  1. 第一个:图表的实例化对象
  2. 第二个:该图表的分页名
from pyecharts.charts import Tab
tab = Tab(
    page_title='分页组件',
    #js_host=
)
#add方法需传入两个参数,第一个:图表的实例化对象,第二个:该图表的分页名
tab.add(set_bar3d(),'3d柱状图')
tab.add(set_map3d(),'三维地图')
tab.add(set_map(),'地理图')

tab.render('csdn文章tab.html')

在这里插入图片描述

  • 15
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值