利用 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)效果

相关文章:
利用 pyecharts 实现地图的数据可视化——第七次人口普查数据的2d、3d展示(关键词:2d 、3d 、map、 geo、涟漪点)
参考文档:链接: link_pyecharts 官方文档 1、map() 传入省份全称,date_pair 是列表套列表 [ [ ],[ ] … ] 2、geo() 传入省份简称,date_pair 是列表套元组 [ ( ),( ) … ] 1、准备数据 population_data:简称经纬度 population_da…...
解决 Elasticsearch 分页查询性能瓶颈——从10分钟到秒级的优化实践
大家好,我是铭毅天下,一名专注于 Elasticsearch (以下简称ES)技术栈的技术爱好者。 今天我们来聊聊球友提出的一个实际问题: ES分页查询性能很差,使用from/size方式检索居然需要10分钟! 这是一个…...
记录IBM服务器检测到备份GPT损坏警告排查解决过程
服务器设备:IBM x3550 M4 Server IMM默认IP地址:192.168.70.125 用户名:USERID 密码:PASSW0RD(注意是零0) 操作系统:Windows Hyper-V Server 2016 IMM Web System Status Warning࿱…...
毫米波测试套装速递!高效赋能5G/6G、新材料及智能超表面(RIS)研发
德思特(Tesight)作为全球领先的测试测量解决方案提供商,始终致力于为前沿技术研发提供高精度、高效率的测试工具。 针对毫米波技术在高频通信、智能超表面(RIS)、新材料等领域的快速应用需求,我们推出毫米…...
Linux中卸载宝塔面板
输入命令 wget http://download.bt.cn/install/bt-uninstall.sh 执行脚本命令 sh bt-uninstall.sh 根据自己的情况选择1还是2 卸载完成校验 bt 这样我们的宝塔面板就卸载完了...
无人机的振动与噪声控制技术!
一、振动控制技术要点 1. 振动源分析 气动振动:旋翼桨叶涡脱落(如叶尖涡干涉)、动态失速(Dynamic Stall)引发的周期性气动激振力(频率与转速相关)。 机械振动:电机偏心、传动轴不…...
Linux(CentOS10) gcc编译
本例子摘自《鸟哥的linux私房菜-基础学习第四版》 21.3 用make进行宏编译 书中的代码在本机器(版本见下)编译出错,改正代码后发布此文章: #kernel version: rootlocalhost:~/testmake# uname -a Linux localhost 6.12.0-65.el10.x86_64 #1…...
【蓝桥杯】第十六届蓝桥杯 JAVA B组记录
试题 A: 逃离高塔 很简单,签到题,但是需要注意精度,用int会有溢出风险 答案:202 package lanqiao.t1;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWrit…...
OSPF的接口网络类型【复习篇】
OSPF在不同网络环境下默认的不同工作方式 [a3]display ospf interface g 0/0/0 # 查看ospf接口的网络类型网络类型OSPF接口的网络类型(工作方式)计时器BMA(以太网)broadcast ,需要DR/BDR的选举hello:10s…...
微信小程序运行机制详解
微信小程序运行机制详解 微信小程序是介于 Web 和原生 App 之间的一种应用形态,具有无需安装、用完即走、体验流畅的特点。本文将从架构层面、运行环境、通信机制等方面深入剖析微信小程序的运行机制。 一、小程序运行架构概览 微信小程序采用双线程模型ÿ…...
python+requests接口自动化测试框架实例教程
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 前段时间由于公司测试方向的转型,由原来的web页面功能测试转变成接口测试,之前大多都是手工进行,利用postman和jmeter进行…...
2021第十二届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组
记录刷题的过程、感悟、题解。 希望能帮到,那些与我一同前行的,来自远方的朋友😉 大纲: 1、空间-(题解)-字节单位转换 2、卡片-(题解)-可以不用当组合来写,思维题 3、直…...
spark课后总结
Spark运行架构 : 运行架构 Spark 采用master - slave(主从)结构。Driver 相当于master,负责管理集群中的作业任务调度;Executor 相当于slave,负责实际执行任务 核心组件 Driver:是Spark驱动…...
智能资源管理机制-重传机制
一、发送端资源管理的核心机制 1. 滑动窗口(Sliding Window) 这是TCP协议的核心优化设计: 窗口动态滑动:发送端不需要保留所有已发送的分组,只需维护一个"发送窗口"窗口大小:由接收方通告的接…...
设计模式 --- 原型模式
原型模式是创建型模式的一种,是在一个原型的基础上,建立一致的复制对象的方式。这个原型通常是我们在应用程序生命周期中需要创建多次的一个典型对象。为了避免初始化新对象潜在的性能开销,我们可以使用原型模式来建立一个非常类似于复印机的…...
基于SiamFC的红外目标跟踪
基于SiamFC的红外目标跟踪 1,背景与原理2,SiamFC跟踪方法概述2.1 核心思想2.2 算法优势3,基于SiamFC的红外跟踪代码详解3.1 网络定义与交叉相关模块3.2 SiamFC 跟踪器实现3.3 主程序:利用 OpenCV 实现视频跟踪4,总结与展望在红外监控、无人机防御以及低光照场景中,红外图…...
多模态学习分析(MLA)驱动高中差异化教学策略研究
一、引言 1.1 研究背景 在当今时代,教育数字化转型的浪潮正席卷全球,深刻地改变着教育的面貌。这一转型不仅是技术的革新,更是教育理念、教学模式和教育管理的全面变革。随着互联网、大数据、人工智能等现代信息技术在教育领域的广泛应用&a…...
设计模式 - 单例
单例设计模式 单例设计模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。 在 JavaScript 里,有多种实现单例设计模式的方式,下面为你详细介绍: 1. 简单对象字面量实现 这是…...
汽车软件开发常用的建模工具汇总
目录 往期推荐 1.Enterprise Architect(EA) 2.MATLAB/Simulink 3.TargetLink 4.Rational Rhapsody 5.AUTOSAR Builder 6.PREEvision 总结 往期推荐 2025汽车行业新宠:欧企都在用的工具软件ETAS工具链自动化实战指南<一&am…...
SSM废品买卖回收管理系统的设计与实现
🍅点赞收藏关注 → 添加文档最下方联系方式咨询本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅 项目视频 07…...
@SchedulerLock 防止分布式环境下定时任务并发执行
背景 在一个有多个服务实例的分布式系统中,如果你用 Scheduled 来定义定时任务,所有实例都会执行这个任务。ShedLock 的目标是只让一个实例在某一时刻执行这个定时任务。 使用步骤 引入依赖 当前以redisTemplate为例子,MongoDB、Zookeeper…...
实信号的傅里叶变换为何属于埃尔米特函数?从数学原理到 MATLAB 动态演示
引言 在信号处理领域,傅里叶变换是分析信号在频域表现的重要工具。特别是对于实信号,实信号是指在时间或空间域内取值为实数的信号,例如音频信号、温度变化等,它的傅里叶变换展现了一个非常特殊的数学性质——共轭对称性…...
【VitePress】新增md文件后自动更新侧边栏导航
目录 说在前面先看效果代码结构详细说明侧边栏格式utils监听文件变化使用pm2管理监听进程 说在前面 操作系统:windows11node版本:v18.19.0npm版本:10.2.3vitepress版本:1.6.3完整代码:github 先看效果 模板用的就是官…...
docker部署scylladb
创建存储数据的目录和配置目录 mkdir -p /root/docker/scylla/data/data /root/docker/scylla/data/commitlog /root/docker/scylla/data/hints /root/docker/scylla/data/view_hints /root/docker/scylla/conf快速启动拷贝配置文件 docker run -d \--name scylla \scylladb/…...
Android 16应用适配指南
Android 16版本特性介绍 https://developer.android.com/about/versions/16?hlzh-cn Android 16 所有功能和 API 概览 https://developer.android.com/about/versions/16/features?hlzh-cn#language-switching Android 16 发布时间 Android 16 适配指南 Google开发平台&…...
2.2goweb解析http请求信息
Go语言的net/http包提供了一些列用于表示HTTP报文的解构。我们可以使用它处理请求和发送响应。其中request结构体代表了客户端发生的请求报文。 核心字段获取方法 1. 请求行信息 通过 http.Request 结构体获取: func handler(w http.ResponseWriter, r *http.Req…...
本地部署大模型(ollama模式)
分享记录一下本地部署大模型步骤。 大模型应用部署可以选择 ollama 或者 LM Studio。本文介绍ollama本地部署 ollama官网为:https://ollama.com/ 进入官网,下载ollama。 ollama是一个模型管理工具和平台,它提供了很多国内外常见的模型&…...
KWDB创作者计划—KWDB:国产分布式多模数据库的创新实践
在数字化转型的浪潮中,数据管理技术正经历着前所未有的变革。随着物联网、人工智能等技术的飞速发展,企业面临着海量多源异构数据的管理挑战。KWDB(KaiwuDB Community Edition)作为一款面向AIoT场景的分布式多模数据库,…...
redis之缓存击穿
一、前言 本期我们聊一下缓存击穿,其实缓存击穿和缓存穿透很相似,区别就是,缓存穿透是一些黑客故意请求压根不存在的数据从而达到拖垮系统的目的,是恶意的,有针对性的。缓存击穿的情况是,数据确实存在&…...
txt、Csv、Excel、JSON、SQL文件读取(Python)
txt、Csv、Excel、JSON、SQL文件读取(Python) txt文件读写 创建一个txt文件 fopen(rtext.txt,r,encodingutf-8) sf.read() f.close() print(s)open( )是打开文件的方法 text.txt’文件名 在同一个文件夹下所以可以省略路径 如果不在同一个文件夹下 ‘…...
