利用 pyecharts 实现地图的数据可视化——第七次人口普查数据的2d、3d展示(关键词:2d 、3d 、map、 geo、涟漪点)

参考文档:链接: link_pyecharts 官方文档

1、map() 传入省份全称,date_pair 是列表套列表 [ [ ],[ ] … ]
2、geo() 传入省份简称,date_pair 是列表套元组 [ ( ),( ) … ]

1、准备数据

population_data:简称+经纬度

在这里插入图片描述

population_data1:省份简称

在这里插入图片描述

population_data2:省份全称

在这里插入图片描述

2.1 2D 图展示 —— map (数据集省份全称)

(1)代码

from pyecharts.charts import Map
from pyecharts import options as opts
import pandas as pd
from pyecharts.globals import ThemeTypedf = pd.read_csv('population_data2.csv',encoding='utf-8')
print(df['人口数量'].max(),df['人口数量'].min())
# 初始化Map对象
map_chart = Map()
# 添加数据和设置地图类型
map_chart.add("人口数量", [list(z) for z in zip(df['省份'], df['人口数量'])], "china")
# 设置全局配置项
map_chart.set_global_opts(title_opts=opts.TitleOpts(title="第七次人口普查各省人口数量"),visualmap_opts=opts.VisualMapOpts(max_=126012510,min_=3648100,is_piecewise=False,range_color=["#e0f3f8", "#0868ac"] ),tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}")
)
# 渲染地图
map_chart.render(r"res/1_1_population_map_2d.html")

(2)zip 函数

zip() 是一个内置函数,它的主要功能是将多个可迭代对象(像列表、元组、字符串等)中对应的元素打包成一个个元组,最后返回由这些元组组成的对象

(3)传入的数据类型是 list

(3)效果

在这里插入图片描述

2.2 涟漪点效果 —— Geo(数据集省份简称) : type_=‘effectScatter’

(1)代码

from pyecharts.charts import *
from pyecharts import options as optsdef geo_effect_scatter():geo = Geo(init_opts=opts.InitOpts(theme='light',width='1000px',height='600px'))geo.add_schema(maptype="china")geo.add("",[("广州", 150), ("北京", 70), ("长沙", 64), ("上海", 74),  ("厦门", 63)],# 带涟漪效果的散点图type_='effectScatter')return geoif __name__ == '__main__':chart = geo_effect_scatter()chart.render(path=r'res/1_2_geo_effect_scatter.html')

(2)传入的数据类型是元组

(3)效果

在这里插入图片描述

2.3 热力图 —— Geo(数据集省份简称): type_=“heatmap”

(1)代码

from pyecharts.charts import Geo
from pyecharts import options as opts
import pandas as pd
from pyecharts.commons.utils import JsCodedf=pd.read_csv('population_data1.csv',encoding='utf-8')
final_chart = (Geo().add_schema(maptype="china")# 添加地图填充数据.add("人口数量",[list(z) for z in zip(df['省份'], df['人口数量'])],type_="heatmap",blur_size=15).set_global_opts(title_opts=opts.TitleOpts(title="人口分布及重点城市"),visualmap_opts=opts.VisualMapOpts(max_=126012510,min_=3648100,range_color=["#e0f3f8", "#0868ac"]),tooltip_opts=opts.TooltipOpts(trigger="item",formatter=JsCode("""function(params) {console.log('params:', params); return [params.name + params.value.toLocaleString()].join('<br/>');}""")))
)final_chart.render("res/1_4_heatmap.html")

(2)效果

在这里插入图片描述

(3)存在的问题

不能正常显示数据标签,如有解决方案,欢迎交流

2.4 关于Geo()和Map()结合的探索 —— Grid()、Page()、overlap() 不适用于地图

(1)Grid()

代码

"""
# 1、Grid() Geo散点图和 Map 地图结合-------------------
"""
from pyecharts.charts import Geo, Map, Grid
from pyecharts import options as opts# 创建 Geo  地图(散点图)
geo = Geo()
geo.add_schema(maptype="china")
geo.add("人口", [("北京", 2189), ("上海", 2487)], type_="effectScatter", tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}"))# 创建 Map 地图(填充色)
map_chart = Map()
map_chart.add("人口", [("北京", 2189), ("上海", 2487)], "china", tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}"))# 使用 Grid 组合
grid = Grid()
grid.add(geo,grid_opts=opts.GridOpts())
grid.add(map_chart,grid_opts=opts.GridOpts())grid.render("res/1_3_1_geo_and_map_grid.html")

效果

在这里插入图片描述

(2)Page() : 一页上放两张图

代码

'''
# 2、page() -------------------
'''
from pyecharts.charts import Geo, Map, Page
from pyecharts import options as opts
page = Page()
page.add(Geo().add_schema("china").add("人口", [("北京", 2189)], "effectScatter"))
# 添加 Map 图表并配置视觉映射
map_chart = (Map().add("人口", [["北京市", 2189]], "china").set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=2189,  # 这里可以根据实际数据调整最大值min_=0,  # 这里可以根据实际数据调整最小值range_color=["#e0f3f8", "#0868ac"]  # 颜色范围))
)
page.add(map_chart)
page.render("res/1_3_2_geo_and_map_page.html")

效果

在这里插入图片描述

(3)热力图叠加涟漪点

代码

from pyecharts.charts import Geo
from pyecharts import options as optsgeo = Geo()
geo.add_schema(maptype="china")# (1) 添加散点(涟漪效果),设置涟漪颜色为紫色
geo.add("重点城市",[("北京", 2189), ("上海", 2487)],type_="effectScatter",symbol_size=10,label_opts=opts.LabelOpts(is_show=False),effect_opts=opts.EffectOpts(color="purple"),  # 设置涟漪颜色为紫色tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}")  # 鼠标悬停显示值
)# (2) 添加热力图(颜色映射),鼠标悬停显示值
geo.add("人口密度",[("北京", 2189), ("上海", 2487), ("广东", 12601)],type_="heatmap",blur_size=20,tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}")  # 鼠标悬停显示值
)geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_show=True)
)
geo.render("res/1_3_3_geo_heatmap_scatter.html")

效果

在这里插入图片描述

(4)overlap 叠加饼图(玫瑰图)和 柱形图

代码

from pyecharts.charts import Pie,Bar
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode
from pyecharts.globals import ThemeType
def gender_mi():  # 性别展示 环形图cate_1 = ['男', '女']data_1 = [614, 277]pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.ROMA)).add('', [list(z) for z in zip(cate_1, data_1)],radius=["30%", "50%"],  # 控制内外半径,即图的大小rosetype="radius",  # 表明是玫瑰图,半径跟数值挂钩center=["75%", "25%"])  # 饼图中心的位置,即整个图的位置。格式:[左右,上下]# .set_global_opts(title_opts=opts.TitleOpts(title="喜欢mi_10_young人群性别", subtitle="有效数据约900人", pos_left='5%'),#                legend_opts=opts.LegendOpts(pos_left="35%")).set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {d}%")))return piedef age_gender_mi():list2 = [{"value": 17, "percent": 17 / (17 + 5)},{"value": 55, "percent": 55 / (55 + 50)},{"value": 150, "percent": 150 / (150 + 81)},{"value": 60, "percent": 60 / (14 + 60)},{"value": 11, "percent": 11 / 11},]list3 = [{"value": 5, "percent": 5 / (17 + 5)},{"value": 50, "percent": 50 / (55 + 50)},{"value": 81, "percent": 81 / (150 + 81)},{"value": 14, "percent": 14 / (14 + 60)},{"value": 0, "percent": 0 / (96603 + 40234)},]c = (Bar(init_opts=opts.InitOpts(theme=ThemeType.ROMA, width='1400px', height='500px'), ).add_xaxis(['<18岁', '19-22岁', '23-30岁', '31-40岁', '>40岁']).add_yaxis("男", list2, stack="stack1", category_gap="50%").add_yaxis("女", list3, stack="stack1", category_gap="50%").set_series_opts(label_opts=opts.LabelOpts(position="right",formatter=JsCode("function(x){return Number(x.data.percent * 100).toFixed() + '%';}"),)).set_global_opts(title_opts=opts.TitleOpts(title="用户年龄段及性别分布", subtitle="23-30岁的男性为主力军", pos_left='5%')))c2 = gender_mi()  # 把环图读进来c.overlap(c2)  # 两个图重叠return cchart = age_gender_mi()
# 渲染图表为HTML文件
chart.render("res/1_3_4_age_gender_chart.html")

效果

在这里插入图片描述

2.5 散点图+涟漪点 —— Geo() 这样可以规避热力图无法正常显示数据标签的弊端

(1)代码

from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType
import pandas as pd
from pyecharts.commons.utils import JsCode# 准备数据(含经纬度)
df = pd.read_csv('population_data.csv',encoding='utf-8')# 获取人口前五的省份
top5 = df.nlargest(5, '人口数量')
effect_data = [(row['省份'], row['人口数量']) for _, row in top5.iterrows()]# 创建Geo图表
geo = (Geo(init_opts=opts.InitOpts(width="1000px", height="600px", theme="light", bg_color="#f8f9fa")).add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="#f1f3f5", border_color="#ced4da"))# 添加散点图(所有省份).add(series_name="人口分布",data_pair=[(row['省份'], row['人口数量']) for _, row in df.iterrows()],type_=ChartType.SCATTER,symbol_size=10,label_opts=opts.LabelOpts(is_show=False),  # 不显示数据标签itemstyle_opts=opts.ItemStyleOpts(color=JsCode("function(params) {return '#1a73e8';}")))# 添加前五名涟漪点.add(series_name="TOP5人口大省",data_pair=effect_data,type_=ChartType.EFFECT_SCATTER,symbol_size=18,effect_opts=opts.EffectOpts(scale=4, period=3, color="#d6336c"),  # 修改涟漪颜色label_opts=opts.LabelOpts(is_show=False),  # 不显示数据标签itemstyle_opts=opts.ItemStyleOpts(color="#d6336c")  # 与涟漪颜色一致)# 设置全局配置.set_global_opts(title_opts=opts.TitleOpts(title="中国各省人口分布热力图",subtitle="数据来源:第七次全国人口普查 | TOP5省份特别标注",pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color="#212529",font_size=20,font_weight="bold"),subtitle_textstyle_opts=opts.TextStyleOpts(color="#6c757d",font_size=12)),visualmap_opts=opts.VisualMapOpts(max_=126012510,min_=3648100,is_piecewise=False,range_color=["#fde725", "#b4de2c", "#5dc962", "#35b779", "#316395"],  # 修改为新的配色方案pos_left="20px",pos_bottom="20px",textstyle_opts=opts.TextStyleOpts(color="#495057")),legend_opts=opts.LegendOpts(pos_top="60px",pos_right="20px",textstyle_opts=opts.TextStyleOpts(color="#495057"),item_width=20,item_height=12,inactive_color="#adb5bd"),tooltip_opts=opts.TooltipOpts(trigger="item",formatter=JsCode("""function(params) {return params.name + ': ' + params.value.toLocaleString();}"""),  # 鼠标悬停时显示值,格式化为带逗号的数字background_color="rgba(255,255,255,0.95)",border_color="#dee2e6",border_width=1,textstyle_opts=opts.TextStyleOpts(color="#495057")))
)# 渲染图表
geo.render("res/1_7_china_population_heatmap_with_top5.html")

(2)效果

在这里插入图片描述

2.6 散点图+热力图+涟漪点—— 全部Geo()

(1)代码

from pyecharts.charts import Geo
from pyecharts import options as opts
from pyecharts.globals import ChartType
import pandas as pd
from pyecharts.commons.utils import JsCode# 准备数据(含经纬度)
df = pd.read_csv('population_data.csv',encoding='utf-8')# 获取人口前五的省份
top5 = df.nlargest(5, '人口数量')
effect_data = [(row['省份'], row['人口数量']) for _, row in top5.iterrows()]# 创建Geo图表
geo = (Geo(init_opts=opts.InitOpts(width="1000px", height="600px", theme="light", bg_color="#f8f9fa")).add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="#f1f3f5", border_color="#ced4da"))# 添加散点图(所有省份).add(series_name="人口分布",data_pair=[(row['省份'], row['人口数量']) for _, row in df.iterrows()],type_=ChartType.SCATTER,symbol_size=10,label_opts=opts.LabelOpts(is_show=False),  # 不显示数据标签itemstyle_opts=opts.ItemStyleOpts(color=JsCode("function(params) {return '#1a73e8';}")))# 添加前五名涟漪点.add(series_name="TOP5人口大省",data_pair=effect_data,type_=ChartType.EFFECT_SCATTER,symbol_size=18,effect_opts=opts.EffectOpts(scale=4, period=3, color="#d6336c"),  # 修改涟漪颜色label_opts=opts.LabelOpts(is_show=False),  # 不显示数据标签itemstyle_opts=opts.ItemStyleOpts(color="#d6336c")  # 与涟漪颜色一致)# 设置全局配置.set_global_opts(title_opts=opts.TitleOpts(title="中国各省人口分布热力图",subtitle="数据来源:第七次全国人口普查 | TOP5省份特别标注",pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color="#212529",font_size=20,font_weight="bold"),subtitle_textstyle_opts=opts.TextStyleOpts(color="#6c757d",font_size=12)),visualmap_opts=opts.VisualMapOpts(max_=126012510,min_=3648100,is_piecewise=False,range_color=["#fde725", "#b4de2c", "#5dc962", "#35b779", "#316395"],  # 修改为新的配色方案pos_left="20px",pos_bottom="20px",textstyle_opts=opts.TextStyleOpts(color="#495057")),legend_opts=opts.LegendOpts(pos_top="60px",pos_right="20px",textstyle_opts=opts.TextStyleOpts(color="#495057"),item_width=20,item_height=12,inactive_color="#adb5bd"),tooltip_opts=opts.TooltipOpts(trigger="item",formatter=JsCode("""function(params) {return params.name + ': ' + params.value.toLocaleString();}"""),  # 鼠标悬停时显示值,格式化为带逗号的数字background_color="rgba(255,255,255,0.95)",border_color="#dee2e6",border_width=1,textstyle_opts=opts.TextStyleOpts(color="#495057")))
)# 渲染图表
geo.render("res/1_7_china_population_heatmap_with_top5.html")

(2)效果

在这里插入图片描述

2.7 利用Grid()实现叠加 —— Geo(散点图+涟漪点)+Map()

(1)代码

from pyecharts.charts import Geo, Map, Grid
from pyecharts import options as opts
from pyecharts.globals import ChartType
import pandas as pd
from pyecharts.commons.utils import JsCode# 准备数据(含经纬度)
df = pd.read_csv('population_data.csv', encoding='utf-8')# 获取人口前五的省份
top5 = df.nlargest(5, '人口数量')
effect_data = [(row['省份'], row['人口数量']) for _, row in top5.iterrows()]# 创建 Geo 图表
geo = (Geo(init_opts=opts.InitOpts(width="1000px", height="600px", theme="light", bg_color="#f8f9fa")).add_schema(maptype="china", itemstyle_opts=opts.ItemStyleOpts(color="#f1f3f5", border_color="#ced4da")).add(series_name="人口分布",data_pair=[(row['省份'], row['人口数量']) for _, row in df.iterrows()],type_=ChartType.SCATTER,symbol_size=10,label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color=JsCode("function(params) {return '#1a73e8';}"))).add(series_name="TOP5 人口大省",data_pair=effect_data,type_=ChartType.EFFECT_SCATTER,symbol_size=18,effect_opts=opts.EffectOpts(scale=4, period=3, color="#d6336c"),label_opts=opts.LabelOpts(is_show=False),itemstyle_opts=opts.ItemStyleOpts(color="#d6336c")).set_global_opts(title_opts=opts.TitleOpts(title="中国各省人口分布热力图及普查数量",pos_left="center",title_textstyle_opts=opts.TextStyleOpts(color="#212529",font_size=20,font_weight="bold")),visualmap_opts=opts.VisualMapOpts(max_=126012510,min_=3648100,is_piecewise=False,range_color=["#fde725", "#b4de2c", "#5dc962", "#35b779", "#316395"],pos_left="20px",pos_bottom="20px",textstyle_opts=opts.TextStyleOpts(color="#495057")),legend_opts=opts.LegendOpts(pos_top="10px",pos_right="10px",align="left",textstyle_opts=opts.TextStyleOpts(color="#495057"),item_width=20,item_height=12,inactive_color="#adb5bd"),tooltip_opts=opts.TooltipOpts(trigger="item",formatter=JsCode("""function(params) {return params.name + ': ' + params.value.toLocaleString();}"""),background_color="rgba(255,255,255,0.95)",border_color="#dee2e6",border_width=1,textstyle_opts=opts.TextStyleOpts(color="#495057")))
)df2 = pd.read_csv('population_data2.csv', encoding='utf-8')
print(df2['人口数量'].max(), df2['人口数量'].min())
# 初始化 Map 对象
map_chart = Map()
map_chart.add("人口数量", [list(z) for z in zip(df2['省份'], df2['人口数量'])], "china")
# 设置全局配置项,调整图例位置和颜色
map_chart.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=126012510,min_=3648100,is_piecewise=False,range_color=["#e0f3f8", "#0868ac"]),tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}"),legend_opts=opts.LegendOpts(pos_top="30px",  # 与 Geo 图表的图例垂直位置对齐pos_right="10px",align="left",textstyle_opts=opts.TextStyleOpts(color="#495057"),item_width=20,item_height=12,inactive_color="#adb5bd")
)# 使用 Grid 组合 Geo 和 Map 图表
grid = (Grid(init_opts=opts.InitOpts(width="1000px", height="1200px")).add(geo, grid_opts=opts.GridOpts(pos_top="5%", pos_bottom="55%")).add(map_chart, grid_opts=opts.GridOpts(pos_top="55%", pos_bottom="5%"))
)# 渲染组合后的图表
grid.render("res/1_7_combined_geo_map00.html")

(2)效果

在这里插入图片描述

(3)问题:图层分离

3.1 3D图

(1)代码

from pyecharts.charts import Map3D
from pyecharts import options as opts
import pandas as pd
from pyecharts.globals import ThemeTypedf = pd.read_csv('population_data2.csv', encoding='utf-8')
print(df['人口数量'].max(), df['人口数量'].min())# 初始化 Map3D 对象
map_chart = Map3D()# 添加数据和设置地图类型
map_chart.add_schema(itemstyle_opts=opts.ItemStyleOpts(color="rgb(5,101,123)",opacity=0.5,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,),view_control_opts=opts.Map3DViewControlOpts(),post_effect_opts=opts.Map3DPostEffectOpts(is_enable=False),
)map_chart.add(series_name="人口数量",data_pair=[list(z) for z in zip(df['省份'], df['人口数量'])],maptype="china",label_opts=opts.LabelOpts(is_show=True),
)# 设置全局配置项,优化 tooltip 显示格式
map_chart.set_global_opts(title_opts=opts.TitleOpts(title="第七次人口普查各省人口数量"),visualmap_opts=opts.VisualMapOpts(max_=126012510,min_=3648100,is_piecewise=False,range_color=["#e0f3f8", "#0868ac"],),tooltip_opts=opts.TooltipOpts(formatter="{b}: {c}"),
)# 渲染地图
map_chart.render("res/2_1_population_map_3d.html")

(2)效果

在这里插入图片描述

3.2 3D图优化版——增加柱状图

(1)代码

from pyecharts.charts import Map3D
from pyecharts import options as opts
from pyecharts.globals import ChartType
import pandas as pd
from pyecharts.commons.utils import JsCode# 省份经纬度数据(简化的中心点坐标)
province_coords = {'北京市': [116.4074, 39.9042],'天津市': [117.2019, 39.0851],'河北省': [114.5305, 38.0410],'山西省': [112.5627, 37.8735],'内蒙古自治区': [111.7656, 40.8175],'辽宁省': [123.4291, 41.8357],'吉林省': [125.3268, 43.8969],'黑龙江省': [126.6617, 45.7423],'上海市': [121.4737, 31.2304],'江苏省': [118.7969, 32.0603],'浙江省': [120.1528, 30.2674],'安徽省': [117.2841, 31.8612],'福建省': [119.2956, 26.1005],'江西省': [115.8579, 28.6820],'山东省': [117.0204, 36.6686],'河南省': [113.6254, 34.7466],'湖北省': [114.3423, 30.5459],'湖南省': [112.9838, 28.1124],'广东省': [113.2663, 23.1322],'广西壮族自治区': [108.3275, 22.8167],'海南省': [110.3492, 20.0174],'重庆市': [106.5505, 29.5630],'四川省': [104.0758, 30.6513],'贵州省': [106.7053, 26.6001],'云南省': [102.7100, 25.0453],'西藏自治区': [91.1172, 29.6469],'陕西省': [108.9542, 34.2655],'甘肃省': [103.8263, 36.0594],'青海省': [101.7800, 36.6232],'宁夏回族自治区': [106.2586, 38.4713],'新疆维吾尔自治区': [87.6168, 43.8256]
}# 人口数据
data = [('北京市', 21893095),('天津市', 13866009),('河北省', 74610235),('山西省', 34915616),('内蒙古自治区', 24049155),('辽宁省', 42591407),('吉林省', 24073453),('黑龙江省', 31850088),('上海市', 24870895),('江苏省', 84748016),('浙江省', 64567588),('安徽省', 61027171),('福建省', 41540086),('江西省', 45188635),('山东省', 101527453),('河南省', 99365519),('湖北省', 57752557),('湖南省', 66444864),('广东省', 126012510),('广西壮族自治区', 50126804),('海南省', 10081232),('重庆市', 32054159),('四川省', 83674866),('贵州省', 38562148),('云南省', 47209277),('西藏自治区', 3648100),('陕西省', 39528999),('甘肃省', 25019831),('青海省', 5923957),('宁夏回族自治区', 7202654),('新疆维吾尔自治区', 25852345)
]df = pd.DataFrame(data, columns=['省份', '人口数量'])
max_population = df['人口数量'].max()
min_population = df['人口数量'].min()# 准备数据:格式为[(省份名称, [经度, 纬度, 高度]), ...]
data_pairs = []
for province, population in data:if province in province_coords:lon, lat = province_coords[province]height = populationdata_pairs.append((province, [lon, lat, height]))
print(data_pairs)
print([list(z) for z in zip(df['省份'], df['人口数量'])])
# 初始化 Map3D 对象
map_chart = Map3D()# 添加地图和设置
map_chart.add_schema(# 地图元素的样式配置itemstyle_opts=opts.ItemStyleOpts(color="#808080",# 地图区域的透明度,取值范围为 0 到 1,1 表示完全不透明opacity=1,# 地图区域的边框宽度border_width=0.8,# 地图区域的边框颜色,这里使用 RGB 格式指定为蓝绿色border_color="rgb(62,215,213)",),# 地图上的标签配置map3d_label=opts.Map3DLabelOpts(# 是否显示地图上的标签,False 表示不显示is_show=True,),# 鼠标悬停在地图元素上时标签的配置emphasis_label_opts=opts.LabelOpts(# 鼠标悬停时是否显示标签,False 表示不显示is_show=True,# 鼠标悬停时标签的文字颜色,这里使用十六进制颜色码指定为白色color="#fff",# 鼠标悬停时标签的字体大小font_size=10,# 鼠标悬停时标签的背景颜色,这里使用 RGBA 格式指定为透明background_color="rgba(0,23,11,0)",),# 地图的光照效果配置light_opts=opts.Map3DLightOpts(# 主光源的颜色,这里使用十六进制颜色码指定为白色main_color="#fff",# 主光源的强度,值越大光照越强main_intensity=1.2,# 主光源阴影的质量,"high" 表示高质量阴影main_shadow_quality="high",# 是否显示主光源的阴影,False 表示不显示is_main_shadow=False,# 主光源的仰角,角度值main_beta=10,# 环境光的强度,值越大环境光越亮ambient_intensity=0.3,)
)
map_chart.add(series_name="人口数量",data_pair=[list(z) for z in zip(df['省份'], df['人口数量'])],maptype="china",label_opts=opts.LabelOpts(is_show=True),
)# 添加3D柱状图数据
map_chart.add(series_name="人口数量",data_pair=data_pairs,type_=ChartType.BAR3D,bar_size=1,shading="lambert",label_opts=opts.LabelOpts(is_show=True,),
)# 设置全局配置项
map_chart.set_global_opts(title_opts=opts.TitleOpts(title="第七次人口普查各省人口数量(单位:人)"),visualmap_opts=opts.VisualMapOpts(max_=126012510,min_=3648100,is_piecewise=False,range_color=["#e0f3f8", "#0868ac"],),tooltip_opts=opts.TooltipOpts(formatter=JsCode("function(data){return data.name + ': ' + data.value[2].toFixed(0) + '人<br>经度: ' + data.value[0].toFixed(4) + '<br>纬度: ' + data.value[1].toFixed(4);}")),
)# 渲染地图
map_chart.render("res/2_2_population_map_3d_V2.html")

(2)效果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/76872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Enovia许可释放

随着企业规模的扩大和业务的不断增长&#xff0c;Enovia许可证的管理变得至关重要。在许多情况下&#xff0c;企业可能面临许可证资源浪费或不足的问题。为了解决这一问题&#xff0c;Enovia提供了许可释放功能&#xff0c;帮助企业更加灵活地管理和使用许可证资源。本文将介绍…

每日一道leetcode(回来了!!!)

236. 二叉树的最近公共祖先 - 力扣&#xff08;LeetCode&#xff09; 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足…

【Redis】布隆过滤器应对缓存穿透的go调用实现

布隆过滤器 https://pkg.go.dev/github.com/bits-and-blooms/bloom/v3 作用&#xff1a; 判断一个元素是不是在集合中 工作原理&#xff1a; 一个位数组&#xff08;bit array&#xff09;&#xff0c;初始全为0。多个哈希函数&#xff0c;运算输入&#xff0c;从而映射到位数…

【ROS2】行为树 BehaviorTree(四):组合使用子树

1、大树调用子树 如下图,左边为大树主干: 1)如果门没有关,直接通过; 2)如果门关闭了,执行开门动作,然后通过 右边为子树,主要任务是开门 1)尝试直接开门; 2)尝试开锁开门,最多尝试5次; 3)最后尝试砸门! XML如何描述大树主干调佣子树:使用关键字 SubTree 来…

【口腔粘膜鳞状细胞癌】文献阅读

写在前面 看看文章&#xff0c;看看有没有思路 文献 The regulatory role of cancer stem cell marker gene CXCR4 in the growth and metastasis of gastric cancer IF:6.8 中科院分区:1区 医学WOS分区: Q1 目的&#xff1a;通过 scRNA-seq 结合大量 RNA-seq 揭示癌症干细胞…

【ComfyUI】蓝耘元生代 | ComfyUI深度解析:高性能AI绘画工作流实践

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能&#xff08;AI&#xff09;通过算法模拟人类智能&#xff0c;利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络&#xff08;如ChatGPT&…

深入理解Java中的队列:核心操作、实现与应用

队列&#xff08;Queue&#xff09;是计算机科学中最基础且重要的数据结构之一&#xff0c;遵循 先进先出&#xff08;FIFO&#xff09; 的规则。Java通过java.util.Queue接口及其丰富的实现类为开发者提供了强大的队列工具。本文将详细解析Java队列的核心操作、常见实现类及其…

idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊

idea里面不能运行 node 命令 cmd 里面可以运行咋回事啊 在 IntelliJ IDEA&#xff08;或其他 JetBrains 系列 IDE&#xff09;中无法运行某些命令&#xff0c;但在系统的命令提示符&#xff08;CMD&#xff09;中可以正常运行&#xff0c;这种情况通常是由于以下原因之一导致的…

Express学习笔记(六)——前后端的身份认证

目录 1. Web 开发模式 1.1 服务端渲染的 Web 开发模式 1.2 服务端渲染的优缺点 1.3 前后端分离的 Web 开发模式 1.4 前后端分离的优缺点 1.5 如何选择 Web 开发模式 2. 身份认证 2.1 什么是身份认证 2.2 为什么需要身份认证 2.3 不同开发模式下的身份认证 3. Sessio…

微服务与Spring Cloud Alibaba简介

微服务&#xff08;或微服务架构&#xff09;是一种云原生架构方法&#xff0c;其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。本单元主要介绍微服务架构的定义、微服务的特征、微服务架构面临的挑战、Spring Cloud 定义、Spring Cloud 核心组件、Spring C…

JPG同步删除RAW批处理文件

相机挑选JPG照片&#xff0c;同步删除RAW格式文件&#xff0c;批处理文件bat&#xff0c;放到JPG和NEF文件夹根目录 – NEF 文件夹 – JPG 文件夹 文件同步删除.bat echo off:: 要同步的文件夹及文件后缀名&#xff08;相同&#xff09;&#xff0c;即要删除文件的目录 set de…

InnoDB的MVCC实现原理?MVCC如何实现不同事务隔离级别?MVCC优缺点?

概念 InnoDB的MVCC&#xff08;Multi-Version Concurrency Control&#xff09;即多版本并发控制&#xff0c;是一种用于处理并发事务的机制。它通过保存数据在不同时间点的多个版本&#xff0c;让不同事务在同一时刻可以看到不同版本的数据&#xff0c;以此来减少锁竞争&…

针对 Java从入门到精通 的完整学习路线图、各阶段技术点、CTO进阶路径以及经典书籍推荐。内容分阶段展开,兼顾技术深度与职业发展

以下是针对 Java从入门到精通 的完整学习路线图、各阶段技术点、CTO进阶路径以及经典书籍推荐。内容分阶段展开&#xff0c;兼顾技术深度与职业发展。 一、学习路线图分阶段详解 阶段1&#xff1a;Java基础入门&#xff08;3-6个月&#xff09; 目标&#xff1a;掌握Java核心…

报错:Nlopt

报错&#xff1a;Nlopt CMake Error at TGH-Planner/fast_planner/bspline_opt/CMakeLists.txt:20 (find_package):By not providing "FindNLopt.cmake" in CMAKE_MODULE_PATH this project hasasked CMake to find a package configuration file provided by "…

鸿蒙公共通用组件封装实战指南:从基础到进阶

一、鸿蒙组件封装核心原则 1.1 高内聚低耦合设计 在鸿蒙应用开发中&#xff0c;高内聚低耦合是组件封装的关键准则&#xff0c;它能极大提升代码的可维护性与复用性。 从原子化拆分的角度来看&#xff0c;我们要把复杂的 UI 界面拆分为基础组件和复合组件。像按钮、输入框这…

Linux 网络基础二 ——应用层HTTP\HTTPS协议

我们程序员写的一个个解决我们实际问题&#xff0c;满足我们日常需求的网络程序&#xff0c;都是在应用层。 前面写的套接字接口都是传输层经过对 UDP 和 TCP 数据发送能力的包装&#xff0c;以文件的形式呈现给我们&#xff0c;让我们可以进行应用层编程。换而言之&#xff0c…

Spark-SQL

Spark-SQL 概述 Spark SQL 是 Spark 用于结构化数据(structured data)处理的 Spark 模块 Shark 是伯克利实验室 Spark 生态环境的组件之一&#xff0c;是基于 Hive 所开发的工具&#xff0c;它修改了内存管理、物理计划、执行三个模块&#xff0c;并使之能运行在 Spark 引擎上…

Java 在人工智能领域的突围:从企业级架构到边缘计算的技术革新

一、Java AI 的底层逻辑&#xff1a;从语言特性到生态重构 在 Python 占据 AI 开发主导地位的当下&#xff0c;Java 正通过技术重构实现突围。作为拥有 30 年企业级开发经验的编程语言&#xff0c;Java 的核心优势在于强类型安全、内存管理能力和分布式系统支持&#xff0c;这…

编程实现除法程序时需要注意的细节

使用Python实现除法程序时&#xff0c;需注意以下关键细节&#xff1a; 除数为零的处理 必须检查除数是否为零&#xff0c;否则会触发ZeroDivisionError异常。可通过try-except结构捕获异常并处理。 整数除法与浮点数除法的区别 • 使用/运算符时&#xff0c;无论操作数是否为…

Java万级并发场景-实战解决

今天我们来做一个典型的消费力度能达到万级别的并发场景&#xff0c;老师点名-学生签到 正常情况 正常情况来说是不同班级下的老师发布不同的点名--然后不同班级下的很多学生同一时间进行签到&#xff0c;签到成功就去修改数据库&#xff0c;签到失败就返回&#xff0c;但是这…