Python使用Pyecharts繪制交互式中國地圖的流程解析
一、為什么選擇Pyecharts繪制地圖
當(dāng)需要展示各省份經(jīng)濟(jì)指標(biāo)、人口分布或疫情數(shù)據(jù)時,表格和柱狀圖往往難以直觀呈現(xiàn)地理空間關(guān)系。Pyecharts作為基于ECharts的Python可視化庫,提供三大核心優(yōu)勢:
- 零代碼交互:生成的HTML地圖支持鼠標(biāo)懸停查看數(shù)值、縮放平移等操作
- 多級地圖支持:從全國到縣級行政區(qū)劃均可渲染
- 高度定制化:顏色漸變、邊界樣式、標(biāo)簽顯示等20+項參數(shù)可調(diào)
以2025年某電商平臺銷售數(shù)據(jù)為例,通過熱力地圖可快速發(fā)現(xiàn):廣東省銷售額占比達(dá)28%,而西北五省總和不足10%。這種空間分布特征在傳統(tǒng)圖表中難以直觀呈現(xiàn)。
二、環(huán)境準(zhǔn)備:安裝與配置
2.1 基礎(chǔ)安裝
pip install pyecharts
2.2 地圖數(shù)據(jù)包安裝(關(guān)鍵步驟)
Pyecharts采用模塊化地圖設(shè)計,需單獨(dú)安裝對應(yīng)數(shù)據(jù)包:
# 中國省級地圖(必須安裝) pip install echarts-china-provinces-pypkg # 可選擴(kuò)展包 pip install echarts-china-cities-pypkg # 市級地圖 pip install echarts-china-counties-pypkg # 縣級地圖
常見問題:若未安裝省級地圖包,渲染時會報錯Map type "china" not exists
三、數(shù)據(jù)準(zhǔn)備:從原始數(shù)據(jù)到可視化格式
3.1 數(shù)據(jù)結(jié)構(gòu)要求
Pyecharts地圖需要特定格式的二維列表:
[("北京", 100), ("上海", 200), ("廣東", 300), ...]
3.2 實(shí)際案例處理
假設(shè)有如下CSV數(shù)據(jù)(部分展示):
省份,銷售額(億元)
北京,125
上海,210
廣東,380
江蘇,295
...
轉(zhuǎn)換代碼:
import pandas as pd
# 讀取CSV文件
df = pd.read_csv('sales_data.csv')
# 轉(zhuǎn)換為元組列表
data = list(zip(df['省份'], df['銷售額(億元)']))
3.3 數(shù)據(jù)驗證技巧
# 檢查省份名稱是否規(guī)范(避免"廣東"與"廣東省"混用)
valid_provinces = {"北京", "上海", "廣東", "江蘇", ...} # 完整列表見附錄
for item in data:
if item[0] not in valid_provinces:
print(f"發(fā)現(xiàn)無效省份名: {item[0]}")
四、基礎(chǔ)地圖繪制:三步完成可視化
4.1 最小可行代碼
from pyecharts.charts import Map
from pyecharts import options as opts
# 示例數(shù)據(jù)
data = [("北京", 100), ("上海", 200), ("廣東", 300)]
# 創(chuàng)建地圖
map_chart = (
Map()
.add("銷售額", data, "china")
.set_global_opts(
title_opts=opts.TitleOpts(title="2025年各省份銷售額"),
visualmap_opts=opts.VisualMapOpts(max_=300)
)
)
# 生成HTML文件
map_chart.render("china_map.html")
4.2 代碼解析
Map() :創(chuàng)建地圖對象
.add() :添加數(shù)據(jù)系列
- 參數(shù)1:系列名稱(圖例顯示)
- 參數(shù)2:數(shù)據(jù)列表
- 參數(shù)3:地圖類型("china"表示中國地圖)
.set_global_opts() :全局配置
標(biāo)題、視覺映射等設(shè)置
.render() :輸出HTML文件
4.3 效果增強(qiáng)技巧
調(diào)整地圖中心點(diǎn)與縮放
.add(..., center=[105, 36], zoom=1.2) # 中心點(diǎn)設(shè)為地理中心,適當(dāng)放大
優(yōu)化標(biāo)簽顯示
.set_series_opts(
label_opts=opts.LabelOpts(
is_show=True, # 顯示標(biāo)簽
color="#333", # 標(biāo)簽顏色
font_size=10 # 字體大小
)
)
五、進(jìn)階美化:打造專業(yè)級地圖
5.1 分段顏色映射
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True, # 啟用分段
pieces=[
{"min": 0, "max": 100, "label": "0-100億", "color": "#FFE4E1"},
{"min": 101, "max": 200, "label": "101-200億", "color": "#FF7F50"},
{"min": 201, "max": 300, "label": "201-300億", "color": "#FF4500"},
{"min": 301, "label": "300億以上", "color": "#8B0000"}
]
)
)
5.2 自定義地圖樣式
.set_series_opts(
itemstyle_opts=opts.ItemStyleOpts(
area_color="#142957", # 省份底色
border_color="#00f2fe", # 邊界顏色
border_width=0.5 # 邊界寬度
)
)
5.3 添加懸停高亮效果
.set_series_opts(
emphasis_opts=opts.ItemStyleOpts(
area_color="#00f2fe", # 懸停時顏色
border_color="#ffffff", # 懸停時邊界
border_width=2 # 懸停時邊界加粗
)
)
六、完整案例:2025年各省份GDP熱力圖
6.1 數(shù)據(jù)準(zhǔn)備
gdp_data = [
("廣東", 124369.67), ("江蘇", 116364.2),
("山東", 83095.90), ("浙江", 73516.3),
("河南", 58887.41), ("四川", 53850.79),
("湖北", 50012.94), ("福建", 48829.61),
("湖南", 46027.47), ("上海", 43214.85)
]
6.2 完整代碼
from pyecharts.charts import Map
from pyecharts import options as opts
# 創(chuàng)建地圖
map_chart = (
Map()
.add(
series_name="GDP(億元)",
data_pair=gdp_data,
maptype="china",
center=[105, 36],
zoom=1.2
)
.set_global_opts(
title_opts=opts.TitleOpts(
title="2025年中國各省份GDP分布",
subtitle="數(shù)據(jù)來源:國家統(tǒng)計局",
pos_left="center"
),
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True,
max_=125000,
pieces=[
{"min": 0, "max": 50000, "label": "<5萬億", "color": "#FFE4E1"},
{"min": 50001, "max": 80000, "label": "5-8萬億", "color": "#FFDAB9"},
{"min": 80001, "max": 100000, "label": "8-10萬億", "color": "#FFA07A"},
{"min": 100001, "label": ">10萬億", "color": "#FF6347"}
],
pos_left="10%",
pos_top="20%"
),
tooltip_opts=opts.TooltipOpts(
trigger="item",
formatter="<br/>{c}億元"
)
)
.set_series_opts(
label_opts=opts.LabelOpts(
is_show=True,
color="#333",
font_size=10
),
itemstyle_opts=opts.ItemStyleOpts(
area_color="#E6E6FA",
border_color="#4682B4"
),
emphasis_opts=opts.ItemStyleOpts(
area_color="#9370DB",
border_color="#FFFFFF",
border_width=1.5
)
)
)
# 生成HTML
map_chart.render("2025_china_gdp_map.html")
6.3 效果說明
分段顯示:GDP分為4個區(qū)間,不同顏色對應(yīng)不同量級
交互功能:
- 鼠標(biāo)懸停顯示省份名稱和具體數(shù)值
- 地圖可縮放平移
視覺優(yōu)化:
- 標(biāo)題居中顯示
- 圖例位于左側(cè)
- 默認(rèn)縮放至合適比例
七、常見問題解決方案
7.1 地圖顯示空白
原因:未安裝對應(yīng)地圖數(shù)據(jù)包
解決:根據(jù)報錯提示安裝缺失的包,如:
pip install echarts-china-provinces-pypkg
7.2 省份名稱不匹配
表現(xiàn):部分省份顯示為灰色(無數(shù)據(jù))
檢查:
- 確認(rèn)省份名稱規(guī)范(如"內(nèi)蒙古"而非"內(nèi)蒙古自治區(qū)")
- 使用完整省份列表核對:
valid_provinces = {
"北京", "天津", "河北", "山西", "內(nèi)蒙古", "遼寧",
"吉林", "黑龍江", "上海", "江蘇", "浙江", "安徽",
"福建", "江西", "山東", "河南", "湖北", "湖南",
"廣東", "廣西", "海南", "重慶", "四川", "貴州",
"云南", "西藏", "陜西", "甘肅", "青海", "寧夏",
"新疆"
}
7.3 數(shù)值范圍顯示異常
現(xiàn)象:顏色映射不準(zhǔn)確
解決:在VisualMapOpts中明確設(shè)置max_值:
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(
max_=50000, # 手動設(shè)置最大值
is_piecewise=True
)
)
八、擴(kuò)展應(yīng)用場景
8.1 結(jié)合Flask/Django嵌入網(wǎng)頁
# Flask示例
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def show_map():
# 生成地圖(實(shí)際項目中可緩存結(jié)果)
map_chart.render("templates/map.html")
return render_template("map.html")
if __name__ == '__main__':
app.run()
8.2 動態(tài)數(shù)據(jù)更新
通過JavaScript定時刷新數(shù)據(jù)(需配合ECharts的setOption方法):
// 偽代碼示例
setInterval(function() {
fetch('/api/get_new_data')
.then(res => res.json())
.then(data => {
myChart.setOption({
series: [{
data: data
}]
});
});
}, 5000);
8.3 3D地圖效果
需安裝額外擴(kuò)展包:
pip install pyecharts-gallery
3D地圖示例:
from pyecharts.charts import Map3D
from pyecharts import options as opts
map3d = (
Map3D()
.add_schema(
maptype="china",
itemstyle_opts=opts.ItemStyleOpts(
color="#1E90FF",
opacity=1,
border_width=0.8
)
)
.add(
series_name="",
data_pair=data,
type_="bar3D",
shading="lambert",
label_opts=opts.LabelOpts(
is_show=False
)
)
.set_global_opts(
visualmap_opts=opts.VisualMapOpts(max_=300)
)
)
map3d.render("3d_map.html")
九、總結(jié)與建議
- 快速上手:從基礎(chǔ)代碼開始,逐步添加配置項
- 數(shù)據(jù)驗證:確保省份名稱規(guī)范,數(shù)值范圍合理
- 交互設(shè)計:合理設(shè)置縮放、標(biāo)簽顯示等交互參數(shù)
- 性能優(yōu)化:大數(shù)據(jù)量時考慮使用
is_map_symbol_show=False隱藏標(biāo)記點(diǎn) - 持續(xù)學(xué)習(xí):關(guān)注Pyecharts官方文檔更新,掌握新特性
通過本文介紹的流程,即使沒有前端開發(fā)經(jīng)驗,也能快速創(chuàng)建出專業(yè)級的交互式地圖。實(shí)際項目中可根據(jù)需求組合使用基礎(chǔ)地圖、分段顏色、3D效果等特性,打造更具說服力的數(shù)據(jù)可視化作品。
到此這篇關(guān)于Python使用Pyecharts繪制交互式中國地圖的流程解析的文章就介紹到這了,更多相關(guān)Python Pyecharts繪制交互式地圖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用python采集Excel表中某一格數(shù)據(jù)
這篇文章主要介紹了使用python采集Excel表中某一格數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-05-05
Tkinter組件實(shí)現(xiàn)Radiobutton的示例
Radiobutton組件用于實(shí)現(xiàn)多選一的問題,本文主要介紹了Tkinter組件實(shí)現(xiàn)Radiobutton的示例,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
查看keras各種網(wǎng)絡(luò)結(jié)構(gòu)各層的名字方式
這篇文章主要介紹了查看keras各種網(wǎng)絡(luò)結(jié)構(gòu)各層的名字方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python基于內(nèi)置庫pytesseract實(shí)現(xiàn)圖片驗證碼識別功能
這篇文章主要介紹了Python基于內(nèi)置庫pytesseract實(shí)現(xiàn)圖片驗證碼識別功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02

