
一次偶然的機會,接觸了pyecharts,發現做圖交互效果非常棒,便深究、摸索、入坑。這篇文章主要講述自己在安裝和使用中遇到的問題,解決方法,最后還會有pyecharts中自己比較喜歡的繪圖功能。
pyecharts是一款將python與echarts結合的強大的數據可視化工具。Echarts 是百度開源的一個數據可視化 JS 庫, Echarts可以生成非常棒的可視化交互圖,pyecharts的開發讓在python平臺上也可以直接使用數據生成圖。
一、pyecharts v1安裝使用
我平時使用的是jupyter notebook,因為anaconda中Jupyter Notebook里沒有集成pyecharts庫,沒有直接調用,需要自行安裝。
安裝pyecharts之前,我們需要了解pyecharts新舊版本的重大區別,自己下載的是什么版本,因為這會影響你代碼是否能正常運行。我自己當初不慎下載了最新V1版,但寫的代碼還是老代碼,結果各種報錯,如下圖等問題。


pyecharts在去年5月份的時候,發布了全新版本v1,修復了之前0.5.X版本留下的bug,但在宣傳新版本各種好的時候,存在一個非常嚴重的問題,新版本向下不再兼容pyecharts 低版本,舊版本上好多語句代碼都在新版本上都無法使用。當我們使用原來跑通的代碼,在無意間更新版本后,使用時各種ImportError、AttributEerror報錯,不要懷疑自己,先去檢查一下自己使用的版本。一定要記住,V1是一個分水嶺,2019年5月也是一個分水嶺,現今大部分新安裝的都是V1新版本。
①開始安裝,管理員模式運行cmd,輸入 pip install pyecharts
如果報錯:You are using pip version 10.0.1, however version 19.0.2 is available. You should consider upgrading via the 'python -m pip install --upgrade pip' command.
未報錯,說明版本以更新,下面②、③步驟可以忽略。
②更新版本,輸入python -m pip install --upgrade pip
更新成功后,會提示:Successfully installed pip-19.0.2
③前面準備就緒后,再次輸入 pip install pyecharts
如果成功會提示:Successfully installed.....pyecharts.....(中間內容省略,看關鍵字)
④驗證是否可以正常使用,打開jupyter notebook,輸入一個簡單的測試代碼
from
能夠正常展示如下水球動態圖,就表示一切OK

⑤如果仍然存在報錯等問題,可以自己去下載安裝文件,下面是是最新版pyecharts1.7.1文件鏈接。
pyecharts?pypi.org
下載后,把文件放到Anaconda3Libsite-packages文件夾里面。
運行Anaconda Prompt,輸入pip install pyecharts,再次測試是否可以正常使用。
如果想安裝歷史舊版本,也可以使用此方法。
⑥如果已安裝過pyecharts,想要查看自己是什么版本的,可以在打開cmd
輸入pip list,會顯示已經安裝過的文件版本

二、pyecharts v1繪圖案例
這里繪圖案例,選擇了自己比較感興趣的幾個圖表,每各圖中涉及的數據值都是隨機生產,數據不具參考價值。
(1)流向圖
全國范圍:
from pyecharts.charts import Geo
# 導入配置項
from pyecharts import options as opts
# ChartType:圖標類型,SymbolType:標記點類型
from pyecharts .globals import ChartType, SymbolType
import randomc = (Geo().add_schema(maptype="china") # 地圖類型,這里選擇china.add("",[("天津", 120000), ("上海", 100000), ("廣州", 80000), ("深圳", 90000), ("長沙", 100000), ("鄭州", 100000),("杭州", 70000),("烏魯木齊",90)],type_=ChartType.EFFECT_SCATTER,color="green",)# 添加數據點.add("geo",[("北京", "天津"), ("北京", "上海"),("北京", "廣州"),("北京", "深圳"),("北京", "長沙"),("北京", "鄭州"),("北京", "杭州"),("北京", "烏魯木齊")],type_=ChartType.LINES,effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=6, color="yellow"),# 添加流向,type_設置為LINES,漣漪配置為箭頭,提供的標記類型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'linestyle_opts=opts.LineStyleOpts(curve=0.2),).set_series_opts(label_opts=opts.LabelOpts(is_show=False))# 不顯示標簽.set_global_opts(title_opts=opts.TitleOpts(title="北京人口省外輸出圖")))c.render_notebook()# 直接在notebook里顯示圖表

省內范圍:
c = (Geo().add_schema(maptype="河南") # 地圖類型,這里選擇鄭州.add("",[("安陽", 20000), ("信陽", 10000), ("南陽", 8000), ("洛陽", 9000), ("濮陽", 1000)],type_=ChartType.EFFECT_SCATTER,color="green",)# 添加數據點.add("geo",[("鄭州", "安陽"), ("鄭州", "信陽"),("鄭州", "南陽"),("鄭州", "洛陽"),("鄭州", "濮陽")],type_=ChartType.LINES,effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=6, color="yellow"),# 添加流向,type_設置為LINES,漣漪配置為箭頭,提供的標記類型包括 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none'linestyle_opts=opts.LineStyleOpts(curve=0.2),).set_series_opts(label_opts=opts.LabelOpts(is_show=False))# 不顯示標簽.set_global_opts(title_opts=opts.TitleOpts(title="鄭州人口省內輸出圖")))c.render_notebook()# 直接在notebook里顯示圖表

(2)熱力圖
以全國各省份人口分布熱力圖為例(這里隨機選擇部分省份)
province = ['北京', '上海', '廣州', '深圳', '河北', '河南', '湖北', '湖南', '黑龍江', '吉林', '內蒙古', '新疆', '西藏']
data = [(i, random.randint(100, 350)) for i in province]geo = (Geo().add_schema(maptype="china").add("人口", data,type_=ChartType.HEATMAP).set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(visualmap_opts=opts.VisualMapOpts(),legend_opts=opts.LegendOpts(is_show=False),title_opts=opts.TitleOpts(title="Geo-全國熱力地圖")))geo.render_notebook()

(3)時間軸
各品牌電腦線上和線下近幾年銷量對比
from pyecharts import options as opts
from pyecharts.charts import Bar, Timeline
from pyecharts.globals import ThemeType
import randomcate = ['Apple', 'Dell', 'Toshiba', 'Samsung', 'Lenovo'] tl = Timeline()
for i in range(2015, 2019): #選擇年份范圍bar = (Bar().add_xaxis(cate).add_yaxis("線上", [random.randint(10000, 15000) for _ in cate]) #隨機賦值.add_yaxis("門店", [random.randint(7000, 12000) for _ in cate]).set_global_opts(title_opts=opts.TitleOpts("電腦品牌{}年營業額".format(i))))tl.add(bar, "{}年".format(i))tl.render_notebook()

(4)3D柱狀圖
建立x坐標為小時,y坐標為星期,z坐標為數值的3維動態柱狀圖
import pyecharts.options as opts
from pyecharts.charts import Bar3Dhours = ["0","1","2","3","4","5","6","7","8","9","10","11", "12","13","14","15","16","17","18","19","20","21","22","23",]
days = ["Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"]
data = [[random.randint(0, 6), random.randint(0, 23), random.randint(0, 15)]for _ in range(100)]
data = [[d[1], d[0], d[2]] for d in data]Bar3D = (Bar3D(init_opts=opts.InitOpts(width="800px", height="400px")).add(series_name="",data=data,xaxis3d_opts=opts.Axis3DOpts(type_="category", data=hours),yaxis3d_opts=opts.Axis3DOpts(type_="category", data=days),zaxis3d_opts=opts.Axis3DOpts(type_="value"),).set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=20,range_color=["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026",],)))Bar3D.render_notebook()

三、總結
相對自己之前知悉的Matplotlib、Seaborn等繪圖包,接觸pyecharts又多打開了一扇大門,愈發覺得圍繞python開發的各種包都好強大,python是個好產品。