[Python視覺化] pyecharts安裝入門及繪製中國貴州地圖

Eastmount發表於2018-04-10

前端或網站開發的博友可能都使用過強大的Echarts技術。ECharts是一個純Javascript的圖表庫,可以流暢的執行在PC和移動裝置上,相容當前絕大部分瀏覽器,底層依賴輕量級的Canvas類庫ZRender,提供直觀、生動、可互動、可高度個性化定製的資料視覺化圖表。ECharts提供了常規的折線圖、柱狀圖、散點圖、餅圖、K線圖,用於統計的盒形圖,用於地理資料視覺化的地圖、熱力圖、線圖,用於關係資料視覺化的關係圖、treemap,多維資料視覺化的平行座標,還有用於BI的漏斗圖、儀表盤,並且支援圖與圖之間的混搭。

下圖是Echarts簡單繪製折線圖的示例,左邊是指令碼程式碼,右邊是顯示圖形,非常美觀。
http://echarts.baidu.com/echarts2/doc/example/line1.html#helianthus


echarts官方網址:http://echarts.baidu.com/tutorial.html
Eastmount文章: [Echarts視覺化] 一.入門篇之簡單繪製中國地圖和貴州地區


既然Echarts這麼好用,Python也有相應的第三方擴充套件包支援,它就是這篇文章講解的pyecharts庫。pyecharts是一個用於生成 Echarts 圖表的類庫,即Echarts與Python的對接,並推薦大家結合Django或Flask使用。下面開始入門介紹,希望這篇文章對你有所幫助,如果有錯誤或不足之處,還請海涵。




一. 安裝pyecharts

pyecharts是相容Python2和Python3的,直接使用pip進行安裝:

pip install pyecharts

安裝如下圖所示:



安裝成功之後,我們直接匯入該擴充套件包使用。常見的圖形包括:(參考 賴德發大神部落格

Bar(柱狀圖/條形圖) 
Bar3D(3D 柱狀圖) 
Boxplot(箱形圖) 
EffectScatter(帶有漣漪特效動畫的散點圖) 
Funnel(漏斗圖) 
Gauge(儀表盤) 
Geo(地理座標系) 
Graph(關係圖) 
HeatMap(熱力圖) 
Kline(K線圖) 
Line(折線/面積圖) 
Line3D(3D 折線圖) 
Liquid(水球圖) 
Map(地圖) 
Parallel(平行座標系) 
Pie(餅圖) 
Polar(極座標系) 
Radar(雷達圖) 
Sankey(桑基圖) 
Scatter(散點圖) 
Scatter3D(3D 散點圖) 
ThemeRiver(主題河流圖) 
WordCloud(詞雲圖)



二. 入門知識


1.柱狀圖

程式碼如下:

# -*- coding:utf-8 -*-
from pyecharts import Bar

bar = Bar("貴州GDP柱狀圖", "副標題")
bar.add("GDP",
        ["貴陽市", "遵義市", "六盤水市", "安順市", "黔東南州"],
        [40, 30, 26, 22, 15])
bar.show_config()
bar.render()

程式碼執行之後,會在本地生成一個render.html檔案,開啟輸出如下所示圖形。

from pyecharts import Bar
#從pyecharts庫中匯入Bar子類
bar = Bar("貴州GDP柱狀圖", "副標題")
#定義Bar()柱狀圖,同時設定主標題和副標題
bar.add()
#呼叫add()函式新增圖表的資料和設定各種配置項
bar.show_config()
#列印輸出圖表的所有配置項
bar.render()
#生成render.html檔案,也可以設定路徑和檔名


2.橫向柱狀圖

程式碼如下:

# -*- coding:utf-8 -*-
from pyecharts import Bar

bar = Bar("貴州GDP柱狀圖", "副標題")
city = ["貴陽市", "遵義市", "六盤水市", "安順市", "黔東南州"]
data1 = [40, 30, 26, 22, 15]
data2 = [13, 43, 32, 38, 20]
bar.add("2017年GDP", city, data1)
bar.add("2016年GDP", city, data2, is_convert=True)
bar.show_config()
bar.render()
輸出如下圖所示:



3.帶有漣漪特效動畫的散點圖

這段程式碼參考簡書網 https://www.jianshu.com/p/b718c307a61c ,強烈推薦大家學習chenjiandongx大神的文章。完整程式碼如下:

# -*- coding:utf-8 -*-
from pyecharts import EffectScatter

es = EffectScatter("動態散點圖各種圖形示例")
es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin")
es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4, symbol="rect")
es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5, symbol="roundRect")
es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill', symbol="diamond")
es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3, symbol="arrow")
es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3, symbol="triangle")
es.render()
執行結果如下圖所示:



4.繪製3D圖形

繪製3D折線圖程式碼如下:

# -*- coding:utf-8 -*-
from pyecharts import Line3D
import random
data = [[1,2,3,4], [1,2,3,4], [0,4,8,16]]
Line3D = Line3D("3D 折線圖示例", width=1200, height=600)
Line3D.add("", data, is_visualmap=True)
Line3D.render()
輸出圖形如下所示:

繪製3D散點圖,並設定隨機散點座標,程式碼如下所示:
# -*- coding:utf-8 -*-
from pyecharts import Scatter3D
import random
data = [[random.randint(0, 100), random.randint(0, 100), random.randint(0, 100)] for _ in range(80)]
range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',
               '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
scatter3D = Scatter3D("3D 散點圖示例", width=1200, height=600)
scatter3D.add("", data, is_visualmap=True, visual_range_color=range_color)
scatter3D.render()       
輸出結果非常美觀,如下圖所示:



5.儀表盤

程式碼如下:

# -*- coding:utf-8 -*-
from pyecharts import Gauge

g = Gauge("儀表盤圖形","副圖示")
g.add("重大專案", "投資佔比", 66.66)
g.show_config()
g.render("g.html")

輸出圖形如下所示:




6.水球圖

程式碼如下:

# -*- coding:utf-8 -*-
from pyecharts import Liquid

liquid = Liquid("水球圖")
liquid.add("Liquid", [0.8])
liquid.show_config()
liquid.render()

輸出如下圖所示:



講到這裡基本的圖形講解完畢,更多知識推薦大家結合實際應用研究。



三. 繪製中國地圖


如果直接繪製中國地圖,只會顯示一個角落,如下圖所示:


1.安裝

這是需要安裝第三方地圖支援包,程式碼如下:
    pip install echarts-countries-pypkg 
    pip install echarts-china-provinces-pypkg
    pip install echarts-china-cities-pypkg

    pip install echarts-countries-pypkg 
    pip install echarts-china-provinces-pypkg
    pip install echarts-china-cities-pypkg

其中echarts-countries-pypkg 是全球國家地圖,echarts-china-provinces-pypkg是中國省級地圖, echarts-china-cities-pypkg是中國城市地圖。安裝過程如下圖所示:








2.繪製中國地圖

安裝之後我們來看一個簡單的中國地圖程式碼,這是作者微信好友全國各省分佈情況,程式碼如下:

#-*- coding:utf-8 -*-
from pyecharts import Map
value =[2, 60, 2, 6, 80, 2, 5, 2, 1, 4, 5, 1,
        4, 1, 5, 2, 2, 5, 4, 1, 1, 10, 2]
attr =["安徽", "北京", "福建", "廣東", "貴州", "海南", "河北", "河南", "黑龍江",
       "湖北", "湖南", "吉林", "江蘇", "遼寧", "山東", "山西", "陝西", "上海",
       "四川", "天津", "雲南", "浙江", "重慶"]
map=Map("各省微信好友分佈", width=1200, height=600)
map.add("", attr, value, maptype='china', is_visualmap=True,
        visual_text_color='#000')
map.show_config()
map.render()
輸出結果如下圖所示,因為作者在北京讀書,貴州人,所以這兩個地方好友最多。


再來看一組中國地圖,全國的空氣質量情況,程式碼如下:

#-*- coding:utf-8 -*-
from pyecharts import Geo

data = [
    ("海門", 9),("鄂爾多斯", 12),("招遠", 12),("舟山", 12),("齊齊哈爾", 14),("鹽城", 15),
    ("赤峰", 16),("青島", 18),("乳山", 18),("金昌", 19),("泉州", 21),("萊西", 21),
    ("日照", 21),("膠南", 22),("南通", 23),("拉薩", 24),("雲浮", 24),("梅州", 25)]
geo = Geo("全國主要城市空氣質量", "data from pm2.5",
          title_color="#fff", title_pos="center",
          width=1200, height=600, background_color='#404a59')
attr, value = geo.cast(data)
geo.add("", attr, value, visual_range=[0, 200],
        visual_text_color="#fff", symbol_size=15, is_visualmap=True)
geo.show_config()
geo.render("kongqi.html")

輸出結果如下所示,它會提示錯誤“coordinates is not found”座標沒有定義,知乎說可以用 geo_cities_coords 引數自定義經緯度處理解決。



而我的解決方法是懷疑中文亂碼錯誤,並且成功解決,即中文前面加個u"貴陽",程式碼如下:
#-*- coding:utf-8 -*-
from pyecharts import Geo

data = [
    (u"海門", 9),(u"鄂爾多斯", 12),(u"招遠", 12),(u"舟山", 12),(u"齊齊哈爾", 14),(u"鹽城", 15),
    (u"赤峰", 16),(u"青島", 18),(u"乳山", 18),(u"金昌", 19),(u"泉州", 21),(u"萊西", 21),
    (u"日照", 21),(u"膠南", 22),(u"南通", 23),(u"拉薩", 24),(u"雲浮", 24),(u"梅州", 25)]
geo = Geo(u"全國主要城市空氣質量", "data from pm2.5",
          title_color="#fff", title_pos="center",
          width=1200, height=600, background_color='#404a59')
attr, value = geo.cast(data)
geo.add("", attr, value, visual_range=[0, 200],
        visual_text_color="#fff", symbol_size=15, is_visualmap=True)
geo.show_config()
geo.render("kongqi.html")
輸出如下圖所示:


3.繪製貴州地圖

最後補充繪製貴州省地圖的程式碼:

#-*- coding:utf-8 -*-
from pyecharts import Map

value = [95, 70, 30, 45, 80,
         10, 25, 40, 5]
attr = [u'貴陽市', u'遵義市',  u'六盤水市', u'安順市', u'畢節市', 
        u'銅仁市', u"黔東南苗族侗族自治州", u"黔南布依族苗族自治州",
        u"黔西南布依族苗族自治州"]
map = Map(u"貴州地圖示例", width=1200, height=600)
map.add("", attr, value, maptype=u'貴州',
        is_visualmap=True, visual_text_color='#000')
map.show_config()
map.render()

輸出如下圖所示:





作者是在學習Python獲取微信資訊,從而視覺化畫圖學習的pyecharts庫,也希望感興趣的同學學習下itchat庫。
參考作者文章: [Python微信開發] 一.itchat入門知識及微信自動回覆、微信簽名詞雲分析

狂風驟起吹落花,飄零萬里到天涯。
天垂六幕千山外,娜璋雲遊看晚霞。
最近四月把婚紗照拍了,開心!同時,寫部落格已經5年了,每個月都堅持寫,這感覺真棒,也謝謝CSDN。






(By:Eastmount 2018-04-10 晚上9點  http://blog.csdn.net/eastmount/ )

        

        



相關文章