Pyecharts 를 어떻게 사용 하여 Map3D 를 만 드 는 지 상세 하 게 설명 합 니 다.

29180 단어 PythonPyecharts
기본 설정

class Map3D(
    #       ,   `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)

def add(
    #     ,   tooltip    ,legend      。
    series_name: str,

    #     (     ,    )
    data_pair: types.Sequence,

    #       (      Bar3D,Line3D,Lines3D,Scatter3D)
    type_: ChartType = None,

    #     ,     pyecharts.datasets.map_filenames.json   
    maptype: str = "china",

    #       
    is_selected: bool = True,

    #         
    is_map_symbol_show: bool = True,

    #     grid3D      。        grid3D   。
    grid_3d_index: types.Numeric = 0,

    #        geo3D      。        geo3D   。
    geo_3d_index: types.Numeric = 0,

    #        globe      。        globe   。
    globe_index: types.Numeric = 0,

    #    bar3D     
    #        
    bar_size: types.Optional[types.Numeric] = None,

    #    bar3D     
    #        。       0   1   。    0,     。
    bevel_size: types.Numeric = 0,

    #    bar3D     
    #        /   ,       /  。
    bevel_smoothness: types.Numeric = 2,

    #    bar3D     
    #      ,   stack              。
    #                            。
    stack: types.Optional[str] = None,

    #    bar3D     
    #       。
    min_height: types.Numeric = 2,

    #    Scatter3D    ;
    #      。     。
    # ECharts           'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'
    #      'path://'              。
    #               ,                ,           。
    #              (    symbol      symbolSize)   。
    symbol: str = "circle",

    #    Scatter3D    ;
    #      ,        10        ,             ,   [20, 10]       20,  10。
    symbol_size: types.Union[types.Numeric, types.Sequence, types.JSFunc] = 10,

    #     ,    'source-over','lighter'。
    #      'source-over'    alpha   。
    #  'lighter'     ,                         。
    blend_mode: str = "source-over",

    #    Lines3D    
    #       。
    #     false,               (        )。
    #         true,     data.coords       2            ,              。
    is_polyline: bool = False,

    #    Lines3D    
    #        ,   `series_options.Line3DEffectOpts`
    effect: types.Lines3DEffect = None,

    #    Line3D,Lines3D    
    #        ,   `series_options.LineStyleOpts`
    linestyle_opts: types.LineStyle = opts.LineStyleOpts(),

    #    Scatter3D,Bar3D,Map3D    
    #      ,   `series_options.LabelOpts`
    label_opts: types.Label = opts.LabelOpts(),

    #         ,   `series_options.TooltipOpts`
    tooltip_opts: types.Tooltip = None,

    #    Scatter3D,Bar3D,Map3D    
    #        ,   `series_options.ItemStyleOpts`
    itemstyle_opts: types.ItemStyle = None,

    #    Scatter3D,Bar3D,Map3D    
    #        ,   `series_options.LabelOpts`
    emphasis_label_opts: types.Label = None,

    #    Scatter3D,Bar3D,Map3D    
    #          ,   `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,

    #       。
    zlevel: types.Numeric = -10,

    #               ,    false,          。
    is_silent: bool = False,

    #       。
    is_animation: bool = True,

    #        。
    animation_duration_update: types.Numeric = 100,

    #          。
    animation_easing_update: types.Numeric = "cubicOut",
)

def add_schema(
    #     ,     pyecharts.datasets.map_filenames.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,

    #                   。
    #     。               、      。
    box_height: types.Optional[types.Numeric] = 10,

    #                   。
    #         ,                GeoJSON      。
    box_depth: types.Optional[types.Numeric] = None,

    #            。          ,   boxHeight。
    # boxHeight - regionHeight               ,       。
    region_height: types.Optional[types.Numeric] = 3,

    #     。    、   、      url。
    #     'auto',     light.ambientCubemap.texture                。
    #           。
    #   :
    #  //        
    #  environment: 'asset/starfield.jpg'
    #  //          
    #  environment: '#000'
    #  //           
    #  environment: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{
    #    offset: 0, color: '#00aaff' //     
    #  }, {
    #    offset: 0.7, color: '#998866' //     
    #  }, {
    #    offset: 1, color: '#998866' //     
    #  }], false)
    environment: types.Optional[types.JSFunc] = None,

    #       。
    #            “  ”   ,             ,     。
    is_show_ground: bool = False,

    #     。
    ground_color: str = "#aaa",

    # instancing   GeoJSON      geometry      
    #   GeoJSON      (  )  geometry            。
    is_instancing: bool = False,

    # 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,

    #           。              、  、     (SSAO)、     。            。
    post_effect_opts: types.Optional[types.Map3DPostEffect] = None,

    #          。      postEffect        。
    is_enable_super_sampling: types.Union[str, bool] = "auto",

    # viewControl       ,       。
    view_control_opts: types.Optional[types.Map3DViewControl] = None,

    #       。
    zlevel: types.Optional[types.Numeric] = -10,

    #              。
    # 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",
)

class Map3DLabelOpts(
    #       。
    is_show: bool = True,

    #          ,                     ,                。
    distance: Numeric = None,

    #        ,                ,                     
。 # : # {a}: 。 # {b}: 。 # {c}: 。 formatter: Optional[JSFunc] = None, # 。 text_style: Union[TextStyleOpts, dict, None] = None, ) class Map3DRealisticMaterialOpts( # 。 detail_texture: Optional[JSFunc] = None, # 。 1, 。 1 , 。 # : detailTexture 2 n 。 512x512, 200x200 。 texture_tiling: Numeric = 1, # 。 texture_offset: Numeric = 0, # roughness ,0 ,1 , 。 roughness: Numeric = 0.5, # metalness ,0 ,1 , 。 # 0 1 。 metalness: Numeric = 0, # , 。 。 # 0.5,0 ,1 。 roughness_adjust: Numeric = 0.5, # , 。 。 # 0.5,0 ,1 。 metalness_adjust: Numeric = 0.5, # 。 # 。 normal_texture: Optional[JSFunc] = None, ) class Map3DLambertMaterialOpts( # 。 detail_texture: Optional[JSFunc] = None, # 。 1, 。 1 , 。 # : detailTexture 2 n 。 512x512, 200x200 。 texture_tiling: Numeric = 1, # 。 texture_offset: Numeric = 0, ) class Map3DColorMaterialOpts( # 。 detail_texture: Optional[JSFunc] = None, # 。 1, 。 1 , 。 # : detailTexture 2 n 。 512x512, 200x200 。 texture_tiling: Numeric = 1, # 。 texture_offset: Numeric = 0, ) class Map3DLightOpts( # 。 main_color: str = "#fff", # 。 main_intensity: Numeric = 1, # 。 。 # 。 。 is_main_shadow: bool = False, # 。 'low', 'medium', 'high', 'ultra' main_shadow_quality: str = "medium", # x , 。 beta 。 # : https://www.echartsjs.com/zh/documents/asset/gl/img/light-alpha-beta.png main_alpha: Numeric = 40, # y , 。 main_beta: Numeric = 40, # 。 ambient_color: str = "#fff", # 。 ambient_intensity: Numeric = 0.2, # url, .hdr HDR 。 # http://www.hdrlabs.com/sibl/archive.html .hdr 。 ambient_cubemap_texture: Optional[str] = None, # 。 ambient_cubemap_diffuse_intensity: Numeric = 0.5, # 。 ambient_cubemap_specular_intensity: Numeric = 0.5, ) class Map3DPostEffectOpts( # 。 。 is_enable: bool = False, # 。 is_bloom_enable: bool = False, # , 0.1 bloom_intensity: Numeric = 0.1, # 。 is_depth_field_enable: bool = False, # , 。 depth_field_focal_distance: Numeric = 50, # , , depth_field_focal_range: Numeric = 20, # F , 。 depth_field_fstop: Numeric = 2.8, # depth_field_blur_radius: Numeric = 10, # 。 。 is_ssao_enable: bool = False, # 。 'low', 'medium', 'high', 'ultra'。 ssao_quality: str = "medium", # 。 , 'quality'。 ssao_radius: Numeric = 2, # 。 。 ssao_intensity: Numeric = 1, # 。 is_color_correction_enable: bool = False, # Echarts 。 # :https://www.echartsjs.com/zh/option-gl.html#geo3D.postEffect.colorCorrection.lookupTexture color_correction_lookup_texture: Optional[JSFunc] = None, # 。 color_correction_exposure: Numeric = 0, # 。 color_correction_brightness: Numeric = 0, # 。 color_correction_contrast: Numeric = 1, # 。 color_correction_saturation: Numeric = 1, # FXAA。 。 is_fxaa_enable: bool = False, ) class Map3DViewControlOpts( # , 'perspective', 'orthographic'。 projection: str = "perspective", # 。 auto_rotate: bool = False, # 。 'cw' , 'ccw', 。 auto_rotate_direction: str = "cw", # 。 / , 10 , 36 。 auto_rotate_speed: Numeric = 10, # 。 autoRotate 。 auto_rotate_after_still: Numeric = 3, # , , 0 , ( )。 damping: Numeric = 0.8, # , 。 。 # 1。 # 0 。 # // # rotateSensitivity: 0 # // # rotateSensitivity: [1, 0] # // # rotateSensitivity: [0, 1] rotate_sensitivity: Union[Numeric, Sequence] = 1, # , 。 1。 # 0 。 zoom_sensitivity: Numeric = 1, # , 。 # 1。 # 0 。 pan_sensitivity: Numeric = 1, # , : # 'left' ( ) # 'middle' # 'right' # : 。 pan_mouse_button: str = "left", # , : # 'left' ( ) # 'middle' # 'right' # : 。 rotate_mouse_button: str = "middle", # , globe # grid3D geo3D 。 # projection 'perspective' 。 distance: Numeric = 100, # 。 projection 'perspective' 。 min_distance: Numeric = 40, # 。 projection 'perspective' 。 max_distance: Numeric = 400, # 。 projection 'orthographic' 。 orthographic_size: Numeric = 100, # 。 projection 'orthographic' 。 min_orthographic_size: Numeric = 20, # 。 projection 'orthographic' 。 max_orthographic_size: Numeric = 400, # x , 。 beta 。 alpha: Numeric = 40, # y , 。 beta: Numeric = 0, # , , [0,0,0]。 center: Optional[Sequence] = None, # alpha 。 。 min_alpha: Numeric = 5, # alpha 。 。 max_alpha: Numeric = 90, # beta 。 。 min_beta: Numeric = -80, # beta 。 。 max_beta: Numeric = 80, # 。 animation: bool = True, # 。 animation_duration_update: Numeric = 1000, # 。 animation_easing_update: str = "cubicInOut", )
데모 예시
1.이동 궤적 이 있 는 3D 맵

example_data = [
    [[119.107078, 36.70925, 1000], [116.587245, 35.415393, 1000]],
    [[117.000923, 36.675807], [120.355173, 36.082982]],
    [[118.047648, 36.814939], [118.66471, 37.434564]],
    [[121.391382, 37.539297], [119.107078, 36.70925]],
    [[116.587245, 35.415393], [122.116394, 37.509691]],
    [[119.461208, 35.428588], [118.326443, 35.065282]],
    [[116.307428, 37.453968], [115.469381, 35.246531]],
]

from pyecharts import options as opts
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType


c = (
    Map3D()
    .add_schema(
        maptype="  ",
        itemstyle_opts=opts.ItemStyleOpts(
            color="rgb(5,101,123)",
            opacity=1,
            border_width=0.8,
            border_color="rgb(62,215,213)",
        ),
        light_opts=opts.Map3DLightOpts(
            main_color="#fff",
            main_intensity=1.2,
            is_main_shadow=False,
            main_alpha=55,
            main_beta=10,
            ambient_intensity=0.3,
        ),
        view_control_opts=opts.Map3DViewControlOpts(center=[-10, 0, 10]),
        post_effect_opts=opts.Map3DPostEffectOpts(is_enable=False),
    )
    .add(
        series_name="",
        data_pair=example_data,
        type_=ChartType.LINES3D,
        effect=opts.Lines3DEffectOpts(
            is_show=True,
            period=4,
            trail_width=3,
            trail_length=0.5,
            trail_color="#f00",
            trail_opacity=1,
        ),
        linestyle_opts=opts.LineStyleOpts(is_show=False, color="#fff", opacity=0),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="       3D  "))
#     .render("       3D  .html")
)
c.render_notebook()
在这里插入图片描述
2.데이터 마크 포인트 의 3D 맵

example_data = [
    ("   ", [127.9688, 45.368, 100]),
    ("   ", [110.3467, 41.4899, 100]),
    ("  ", [125.8154, 44.2584, 100]),
    ("  ", [123.1238, 42.1216, 100]),
    ("  ", [114.4995, 38.1006, 100]),
    ("  ", [117.4219, 39.4189, 100]),
    ("  ", [112.3352, 37.9413, 100]),
    ("  ", [109.1162, 34.2004, 100]),
    ("  ", [103.5901, 36.3043, 100]),
    ("  ", [106.3586, 38.1775, 100]),
    ("  ", [101.4038, 36.8207, 100]),
    ("  ", [87.9236, 43.5883, 100]),
    ("  ", [91.11, 29.97, 100]),
    ("  ", [103.9526, 30.7617, 100]),
    ("  ", [108.384366, 30.439702, 100]),
    ("  ", [117.1582, 36.8701, 100]),
    ("  ", [113.4668, 34.6234, 100]),
    ("  ", [118.8062, 31.9208, 100]),
    ("  ", [117.29, 32.0581, 100]),
    ("  ", [114.3896, 30.6628, 100]),
    ("  ", [119.5313, 29.8773, 100]),
    ("  ", [119.4543, 25.9222, 100]),
    ("  ", [116.0046, 28.6633, 100]),
    ("  ", [113.0823, 28.2568, 100]),
    ("  ", [106.6992, 26.7682, 100]),
    ("  ", [108.479, 23.1152, 100]),
    ("  ", [110.3893, 19.8516, 100]),
    ("  ", [121.4648, 31.2891, 100]),
]

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



c = (
    Map3D()
    .add_schema(
        itemstyle_opts=opts.ItemStyleOpts(
            color="rgb(5,101,123)",
            opacity=1,
            border_width=0.8,
            border_color="rgb(62,215,213)",
        ),
        map3d_label=opts.Map3DLabelOpts(
            is_show=False,
            formatter=JsCode("function(data){return data.name + " " + data.value[2];}"),
        ),
        emphasis_label_opts=opts.LabelOpts(
            is_show=False,
            color="#fff",
            font_size=10,
            background_color="rgba(0,23,11,0)",
        ),
        light_opts=opts.Map3DLightOpts(
            main_color="#fff",
            main_intensity=1.2,
            main_shadow_quality="high",
            is_main_shadow=False,
            main_beta=10,
            ambient_intensity=0.3,
        ),
    )
    .add(
        series_name="Scatter3D",
        data_pair=example_data,
        type_=ChartType.SCATTER3D,
        bar_size=1,
        shading="lambert",
        label_opts=opts.LabelOpts(
            is_show=False,
            formatter=JsCode("function(data){return data.name + ' ' + data.value[2];}"),
        ),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="      3D  "))
#     .render("      3D  .html")
)
c.render_notebook()
3.3D 막대 그래프 의 3D 지도

example_data = [
    ("   ", [127.9688, 45.368, 100]),
    ("   ", [110.3467, 41.4899, 300]),
    ("  ", [125.8154, 44.2584, 300]),
    ("  ", [123.1238, 42.1216, 300]),
    ("  ", [114.4995, 38.1006, 300]),
    ("  ", [117.4219, 39.4189, 300]),
    ("  ", [112.3352, 37.9413, 300]),
    ("  ", [109.1162, 34.2004, 300]),
    ("  ", [103.5901, 36.3043, 300]),
    ("  ", [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, 300]),
    ("  ", [119.5313, 29.8773, 300]),
    ("  ", [119.4543, 25.9222, 300]),
    ("  ", [116.0046, 28.6633, 300]),
    ("  ", [113.0823, 28.2568, 300]),
    ("  ", [106.6992, 26.7682, 300]),
    ("  ", [108.479, 23.1152, 300]),
    ("  ", [110.3893, 19.8516, 300]),
    ("  ", [121.4648, 31.2891, 1300]),
]

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



c = (
    Map3D()
    .add_schema(
        itemstyle_opts=opts.ItemStyleOpts(
            color="rgb(5,101,123)",
            opacity=1,
            border_width=0.8,
            border_color="rgb(62,215,213)",
        ),
        map3d_label=opts.Map3DLabelOpts(
            is_show=False,
            formatter=JsCode("function(data){return data.name + " " + data.value[2];}"),
        ),
        emphasis_label_opts=opts.LabelOpts(
            is_show=False,
            color="#fff",
            font_size=10,
            background_color="rgba(0,23,11,0)",
        ),
        light_opts=opts.Map3DLightOpts(
            main_color="#fff",
            main_intensity=1.2,
            main_shadow_quality="high",
            is_main_shadow=False,
            main_beta=10,
            ambient_intensity=0.3,
        ),
    )
    .add(
        series_name="bar3D",
        data_pair=example_data,
        type_=ChartType.BAR3D,
        bar_size=1,
        shading="lambert",
        label_opts=opts.LabelOpts(
            is_show=False,
            formatter=JsCode("function(data){return data.name + ' ' + data.value[2];}"),
        ),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="3D    3D  "))
#     .render("3D    3D  .html")
)
c.render_notebook()
4.전국 행정구 역 지도

from pyecharts import options as opts
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType

c = (
    Map3D()
    .add_schema(
        itemstyle_opts=opts.ItemStyleOpts(
            color="rgb(5,101,123)",
            opacity=1,
            border_width=0.8,
            border_color="rgb(62,215,213)",
        ),
        map3d_label=opts.Map3DLabelOpts(
            is_show=True,
            text_style=opts.TextStyleOpts(
                color="#fff", font_size=16, background_color="rgba(0,0,0,0)"
            ),
        ),
        emphasis_label_opts=opts.LabelOpts(is_show=True),
        light_opts=opts.Map3DLightOpts(
            main_color="#fff",
            main_intensity=1.2,
            is_main_shadow=False,
            main_alpha=55,
            main_beta=10,
            ambient_intensity=0.3,
        ),
    )
    .add(series_name="", data_pair="", maptype=ChartType.MAP3D)
    .set_global_opts(
        title_opts=opts.TitleOpts(title="China 3D Map-Base"),
        visualmap_opts=opts.VisualMapOpts(is_show=False),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )
#     .render("        .html")
)
c.render_notebook()
5.세계 인구 분포 지도

import pyecharts.options as opts
from pyecharts.charts import MapGlobe
from pyecharts.faker import POPULATION

data = [x for _, x in POPULATION[1:]]
low, high = min(data), max(data)

c = (
    MapGlobe()
    .add_schema()
    .add(
        maptype="world",
        series_name="        ",
        data_pair=POPULATION[1:],
        is_map_symbol_show=False,
        label_opts=opts.LabelOpts(is_show=False),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            min_=low,
            max_=high,
            range_text=["max", "min"],
            is_calculable=True,
            range_color=["lightskyblue", "yellow", "orangered"],
        )
    )
#     .render("        .html")
)
c.render_notebook()
在这里插入图片描述
Pyecharts 를 사용 하여 Map3D 를 만 드 는 방법 에 대한 자세 한 설명 은 여기까지 입 니 다.더 많은 Pyecharts 제작 Map3D 콘 텐 츠 는 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기