[python] 幾行代碼也能玩轉世界地圖?
前些天收到某位大佬的求助,說是需要給根據數據給安徽省地市來繪制個圖,用不同顏色來直觀表示數據。當時就想到了Python提供一個繪制地圖的庫—— Pyecharts。
Pyecharts是一個用於生成echarts圖表的類庫, 它是百度開源的一個數據可視化 JS 庫。Echarts詳情點擊這裏。
安裝庫很簡單,大家只要在環境變量裏有添加過Python和其pip工具就OK。
pip install Pyecharts
當然有了該庫後還不夠,需要地圖文件,所以以下幾個需要按需安裝
- 全球國家地圖: echarts-countries-pypkg (1.9MB): 世界地圖和 213 個國家,包括中國地圖
- 中國省級地圖: echarts-china-provinces-pypkg (730KB):23 個省,5 個自治區
- 中國市級地圖: echarts-china-cities-pypkg (3.8MB):370 個中國城市
- 中國縣區級地圖: echarts-china-counties-pypkg (4.1MB):2882 個中國縣·區
- 中國區域地圖: echarts-china-misc-pypkg (148KB):11 個中國區域地圖,比如華南、華北。
如上使用pip install 命令完成安裝即可。
基本應用::基本地圖繪制
如果我們需要繪制一副安徽省的地圖,並且我們給每個地市一定的數據,讓地圖在著色上表現出其數據的差異,這時,pyecharts是特別方便的一個應用。
from pyecharts import Map city = [‘合肥市‘, ‘蕪湖市‘, ‘宿州市‘,‘淮北市‘,‘亳州市‘,‘阜陽市‘,‘蚌埠市‘,‘淮南市‘,‘滁州市‘,‘六安市‘,‘馬鞍山市‘,‘安慶市‘,‘銅陵市‘,‘宣城市‘,‘池州市‘,"黃山市"] area = [11445.1, 6026.05, 9938.77, 2741.39, 8521.23, 10118.17,5950.72, 5532.30, 13515.99, 15450.82, 4049.13, 13537.96, 2922.60, 12312.55,8398.72, 9678.39] # 繪制地圖 map_1 = Map("安徽省圖例-各地市面積",title_pos=‘center‘,width=1200, height=600) # 地圖詳細信息 map_1.add("", city, area,maptype=‘安徽‘, is_visualmap=True, visual_range=[min(area), max(area)], visual_text_color=‘black‘, is_map_symbol_show=False, is_label_show=True) # 輸出到當前文件夾下,保存名為 安徽省地圖,文件類型為html map_1.render("安徽省地圖.html")
看看文件的結果如何:
這個簡直很完美好吧,
1.左側的顏色區間為漸變色,天空藍——黃——紅,表示的數據為由低到高;
2.數據的值並非手動分段,而是自動分段,故不一定是我們想要的;
3.鼠標放在某塊地市區域上時,會高亮顯示,並且會顯示詳細信息,這是一個可選項。
4…還是自己挖掘吧。
既然是由開源JS遷過來的,我們就必須要看看其網頁源代碼。
Woc,這個代碼行數和右邊的滾動塊根本不是我想要的比例好嗎!!看來期間那段js函數是一個大工程啊。
從參數option_xxxx可以看出,這些項基本為我們自己定義:如
title是一個字典,text值為我們標題值,這裏用的其他編碼所表示
left值為我們所設置的 title_pos= ‘center’
top,textStyle,subtextStyle為默認值,我們並未去修改。
挑一些重要的說:
mapType即為我們所想顯示的地圖,如我們選的安徽(不要帶上省市單位,如想顯示合肥市,則填合肥即可)
data是我們所選地市名稱和面積數據,所以在Python中我們也可以寫成字典形式
VisualMap基本就是地圖顯示的詳細信息了,
Type有兩個值可以選 continuous和piecewise,前者為連續後者為分段
Min,max是數據範圍,即Python中visual_range的參數
inRange內參數color即顏色範圍,可以選擇多項,當然可以用英文表示,如’skyblue’等
splitNumber是分段,自動分為5段,默認值為5
參數眾多,以上挑了一些比較重要的。
如果想要編輯這HTML文件,可以使用記事本打開,還有一個比較好用的文檔編輯器notepad++(適用於多種文檔),sublime text,Dreamweaver等文件。
如果想要了解更詳細的參數,訪問這裏。
官方文檔。
(PS:文檔是用word編輯,發表於本人公眾號的,超鏈接一律失效,圖片水印為公眾號名稱,支付寶搜索8282704領紅包)
[python] 幾行代碼也能玩轉世界地圖?