利用Python繪制酷炫的3D地圖

之前我們介紹瞭很多Python地圖可視化的內容,本次主要介紹如何Python繪制3D地圖,還是比較神奇的,下面讓我們一起一飽眼福吧!

1.重慶市3D地圖

from pyecharts import options as opts
from pyecharts.charts import Map3D
from pyecharts.globals import ChartType
# 經緯度
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]],
]
c = (
    Map3D(init_opts=opts.InitOpts(width="1400px", height="700px"))
    .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="Map3D"))
    .render("區縣3D地圖.html")
)

2.中國3D地圖一

數組裡面分別代表:經緯度,數值。

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, 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]),
]

c = (
    Map3D(init_opts=opts.InitOpts(width="1400px", height="700px"))
    .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="Map3D"))
    .render("中國3D地圖.html")
)

3.中國3D地圖二

如果說前面的那個你看起來不太舒服,那麼這個絕對適合做數據可視化展示喲!

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, 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]),
]

c = (
    Map3D(init_opts=opts.InitOpts(width="1400px", height="700px"))
    .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="數據",
        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="城市數據"))
    .render("帶有數據展示地圖.html")
)

看完直呼這個模板,適合做城市之間的數據對,同時也展示瞭經緯度。

4.中國3D地圖三

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

c = (
    Map3D(init_opts=opts.InitOpts(width="1400px", height="700px"))
    .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="全國行政區劃地圖-Base"),
        visualmap_opts=opts.VisualMapOpts(is_show=False),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )
    .render("全國標簽地圖.html")
)

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(init_opts=opts.InitOpts(width="1400px", height="700px"))
    .add_schema()
    .add(
        maptype="world",
        series_name="World Population",
        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")
)

其實pyecharts還可以做百度地圖,可以縮放定位到每一個區域,但是其實我們在日常生活中可能用不上,如果要用可以去百度地圖展示效果!

以上就是利用Python繪制酷炫的3D地圖的詳細內容,更多關於Python 3D地圖的資料請關註WalkonNet其它相關文章!

推薦閱讀: