参考文档:链接: 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 ThemeType
df = 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 opts
def 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 geo
if __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 JsCode
df=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 opts
geo = 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 pie
def 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 c
chart = 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 ThemeType
df = 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 = population
data_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")