我們都知道python上的一款可視化工具 matplotlib , 但是它是靜態(tài)的。后來發(fā)現(xiàn)了 pyecharts 模塊,簡直好用到不行,可視化類型非常多,它是基于 Echarts 開發(fā)的。 Echarts 是百度開源的一個數(shù)據(jù)可視化 JS 庫,憑借著良好的交互性,精巧的圖表設計,得到了眾多開發(fā)者的認可。而 Python,很適合用于數(shù)據(jù)處理。當數(shù)據(jù)分析遇上數(shù)據(jù)可視化時,pyecharts 就誕生了。 下面帶大家快速了解 pyecharts 以及基本使用方法: ? 特性
? 安裝 1pip install pyecharts Python學習交流群:1004391443,這里有資源共享,技術(shù)解答,還有小編從最基礎(chǔ)的Python資料到項目實戰(zhàn)的學習資料都有整理,希望能幫助你更了解python,學習python。 注意:pyecharts 共有兩個版本,v0.5.X 和 V1.0.X 間完全不兼容,且v0.5.X版本作者已經(jīng)不維護了,請使用V1.0.X 示例數(shù)據(jù) pyecharts 給我們提供了示例數(shù)據(jù),后面的圖表示例的數(shù)據(jù)均來自 Faker 類,F(xiàn)aker 類的定義如下: 1class Faker: 2 clothes = ['襯衫', '毛衣', '領(lǐng)帶', '褲子', '風衣', '高跟鞋', '襪子'] 3 drinks = ['可樂', '雪碧', '橙汁', '綠茶', '奶茶', '百威', '青島'] 4 phones = ['小米', '三星', '華為', '蘋果', '魅族', 'VIVO', 'OPPO'] 5 fruits = ['草莓', '芒果', '葡萄', '雪梨', '西瓜', '檸檬', '車厘子'] 6 animal = ['河馬', '蟒蛇', '老虎', '大象', '兔子', '熊貓', '獅子'] 7 cars = ['寶馬', '法拉利', '奔馳', '奧迪', '大眾', '豐田', '特斯拉'] 8 dogs = ['哈士奇', '薩摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基'] 9 week = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']10 week_en = 'Saturday Friday Thursday Wednesday Tuesday Monday Sunday'.split()11 clock = (12 '12a 1a 2a 3a 4a 5a 6a 7a 8a 9a 10a 11a 12p '13 '1p 2p 3p 4p 5p 6p 7p 8p 9p 10p 11p'.split()14 )15 visual_color = [16 '#313695',17 '#4575b4',18 '#74add1',19 '#abd9e9',20 '#e0f3f8',21 '#ffffbf',22 '#fee090',23 '#fdae61',24 '#f46d43',25 '#d73027',26 '#a50026',27 ]28 months = ['{}月'.format(i) for i in range(1, 13)]29 provinces = ['廣東', '北京', '上海', '江西', '湖南', '浙江', '江蘇']30 guangdong_city = ['汕頭市', '汕尾市', '揭陽市', '陽江市', '肇慶市', '廣州市', '惠州市']31 country = [32 'China',33 'Canada',34 'Brazil',35 'Russia',36 'United States',37 'Africa',38 'Germany',39 ]40 days_attrs = ['{}天'.format(i) for i in range(30)]41 days_values = [random.randint(1, 30) for _ in range(30)]4243 def choose(self) -> list:44 return random.choice(45 [46 self.clothes,47 self.drinks,48 self.phones,49 self.fruits,50 self.animal,51 self.dogs,52 self.week,53 ]54 )5556 @staticmethod57 def values(start: int = 20, end: int = 150) -> list:58 return [random.randint(start, end) for _ in range(7)]5960 @staticmethod61 def rand_color():62 return random.choice(63 [64 '#c23531',65 '#2f4554',66 '#61a0a8',67 '#d48265',68 '#749f83',69 '#ca8622',70 '#bda29a',71 '#6e7074',72 '#546570',73 '#c4ccd3',74 '#f05b72',75 '#444693',76 '#726930',77 '#b2d235',78 '#6d8346',79 '#ac6767',80 '#1d953f',81 '#6950a1',82 ]83 ) 常用的圖表類型 Bar:柱狀圖/條形圖 柱狀圖對應的模塊是 Bar 除此之外可以設置全局配置和系列配置項。配置項都是基于 options 示例代碼: 1# coding: utf-8 2from example.commons import Faker 3from pyecharts import options as opts 4from pyecharts.charts import Bar 5 6def bar_base(): 7 8 bar = Bar(init_opts=opts.InitOpts(page_title='bar頁面')) # 設置html頁面標題 9 # bar.add_xaxis(['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']) # 設置x軸的參數(shù)1011 bar.add_xaxis(Faker.choose())12 bar.add_yaxis('A', Faker.values())13 bar.add_yaxis('B', Faker.values())1415 # 設置全局配置項,可選16 bar.set_global_opts(opts.TitleOpts(title='主標題', subtitle='副標題'))17 # render 會生成本地 HTML 文件,默認會在當前目錄生成 render.html 文件18 bar.render('bar.html') # 也可以自己指定文件名1920if __name__ == '__main__':21 bar_base() 運行代碼后會在當前目錄生成一個 ”bar.html“ 的文件,我們在瀏覽器中打開它。效果圖如下: ![]() bar.html 生成的頁面支持-點擊取消顯示某 Series ![]() 只顯示A 除了上述的使用方法之外,pyecharts 所有方法均支持鏈式調(diào)用! 翻轉(zhuǎn)XY軸 代碼如下: 1def bar_reversal_axis() -> Bar: 2 3 # pyecharts 所有方法均支持鏈式調(diào)用。 4 c = ( 5 Bar(init_opts=opts.InitOpts(page_title='bar頁面')) 6 .add_xaxis(Faker.choose()) 7 .add_yaxis('商家A', Faker.values()) 8 .add_yaxis('商家B', Faker.values()) 9 .reversal_axis()10 .set_global_opts(toolbox_opts=opts.ToolboxOpts()) # 設置工具箱配置項11 .set_series_opts(label_opts=opts.LabelOpts(position='right')) # 系列配置項12 .set_global_opts(title_opts=opts.TitleOpts(title='Bar-翻轉(zhuǎn) XY 軸')) # 全局配置項13 )14 return c151617if __name__ == '__main__':18 bar_reversal_axis().render('bar.html') 效果圖如下: ![]() 翻轉(zhuǎn) XY 軸 部分堆疊數(shù)據(jù) 同個類目軸上系列配置相同的 stack 值可以堆疊放置 例如堆疊放置A,B的代碼如下: 1def bar_stack1() -> Bar: 2 c = ( 3 Bar() 4 .add_xaxis(Faker.choose()) 5 6 # 數(shù)據(jù)堆疊,同個類目軸上系列配置相同的 stack 值可以堆疊放置。 7 # stack: Optional[str] = None, 8 .add_yaxis('A', Faker.values(), stack='stack1') 9 .add_yaxis('B', Faker.values(), stack='stack1')10 .add_yaxis('C', Faker.values())11 .set_series_opts(label_opts=opts.LabelOpts(is_show=False))12 .set_global_opts(title_opts=opts.TitleOpts(title='Bar-堆疊數(shù)據(jù)(部分)'))13 )14 return c ![]() 部分堆疊數(shù)據(jù) 區(qū)域縮放配置項 1def bar_datazoom_slider() -> Bar: 2 c = ( 3 Bar(init_opts=opts.InitOpts(page_title='bar頁面')) 4 .add_xaxis(Faker.days_attrs) 5 .add_yaxis('商家A', Faker.days_values) 6 .set_global_opts( 7 title_opts=opts.TitleOpts(title='Bar-DataZoom(slider-水平)'), 8 datazoom_opts=[opts.DataZoomOpts(type_='slider',)] 9 )10 )11 return c 區(qū)域縮放配置項的設置方法在 DataZoomOpts 類中,我們可以點進去查看源碼: ![]() 源碼 其中,主要用到的參數(shù)含義如下: 1 type_: str = 'slider', # 組件類型,可選 'slider', 'inside'2 # 拖動時,是否實時更新系列的視圖。如果設置為 false,則只在拖拽結(jié)束的時候更新。3 is_realtime: bool = True,45 # 布局方式是橫還是豎。可選值為:'horizontal', 'vertical'6orient: str = 'horizontal', 知道參數(shù)的含義后我們可以來試試效果 比如我們要將區(qū)域縮放布局改為豎,將 orient 定義為 vertical 即可,代碼就不展示,可以自己動手試試! HeatMap:熱力圖 熱力圖主要通過顏色去表現(xiàn)數(shù)值的大小,必須要配合 visualMap 組件使用。 直角坐標系上必須要使用兩個類目軸。 熱力圖使用的方法函數(shù)是 add_yaxis,下面是函數(shù)的用法說明: 1def add_yaxis( 2 # 系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。 3 series_name: str, 4 5 # Y 坐標軸數(shù)據(jù) 6 yaxis_data: Sequence, 7 8 # 系列數(shù)據(jù)項 9 value: Sequence,1011 # 是否選中圖例12 is_selected: bool = True,1314 # 使用的 x 軸的 index,在單個圖表實例中存在多個 x 軸的時候有用。15 xaxis_index: Optional[Numeric] = None,1617 # 使用的 y 軸的 index,在單個圖表實例中存在多個 y 軸的時候有用。18 yaxis_index: Optional[Numeric] = None,1920 # 標簽配置項,參考 `series_options.LabelOpts`21 label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),2223 # 標記點配置項,參考 `series_options.MarkPointOpts`24 markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,2526 # 標記線配置項,參考 `series_options.MarkLineOpts`27 markline_opts: Union[opts.MarkLineOpts, dict, None] = None,2829 # 提示框組件配置項,參考 `series_options.TooltipOpts`30 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,3132 # 圖元樣式配置項,參考 `series_options.ItemStyleOpts`33 itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,34)35 其中series_name, yaxis_data, value 是三個必傳參數(shù) 示例代碼如下: 1import random 2from example.commons import Faker 3from pyecharts import options as opts 4from pyecharts.charts import HeatMap 5 6 7def heatmap_base() -> HeatMap: 8 value = [[i, j, random.randint(0, 50)] for i in range(24) for j in range(7)] 9 c = (10 HeatMap()11 .add_xaxis(Faker.clock)12 .add_yaxis('series', Faker.week, value)13 .set_global_opts(title_opts=opts.TitleOpts(title='HeatMap-基本示例'),14 visualmap_opts=opts.VisualMapOpts(), )15 )1617 return c181920if __name__ == '__main__':21 heatmap_base().render('heatMap.html') WordCloud:詞云圖 詞云圖用的的方法函數(shù)是 add,使用方法如下: 1def add( 2 # 系列名稱,用于 tooltip 的顯示,legend 的圖例篩選。 3 series_name: str, 4 5 # 系列數(shù)據(jù)項,[(word1, count1), (word2, count2)] 6 data_pair: Sequence, 7 8 # 詞云圖輪廓,有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可選 9 shape: str = 'circle',1011 # 單詞間隔12 word_gap: Numeric = 20,1314 # 單詞字體大小范圍15 word_size_range=None,1617 # 旋轉(zhuǎn)單詞角度18 rotate_step: Numeric = 45,1920 # 提示框組件配置項,參考 `series_options.TooltipOpts`21 tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,22)23 其中series_name, data_pair, shape 是三個必傳參數(shù) 示例代碼如下: 1from pyecharts.charts import WordCloud 2from pyecharts import options as opts 3 4words = [ 5 ('火箭', 10000), 6 ('勇士庫里', 8888), 7 ('在你寫這個教程之前,我已經(jīng)會用了', 6181), 8 ('哈登', 6386), 9 ('金州拉文', 5055),10 ('杜蘭特', 6467),11 ('戳眼', 2244),12 ('NBA', 1868),13 ('季后賽', 1484),14 ('約老師', 1112),15 ('利拉德', 865),16 ('雙卡雙待', 847),17 ('字母歌MVP', 5582),18 ('卡哇伊', 555),19 ('猛龍', 550),20 ('大帝', 462),21 ('西蒙斯不投三分', 366),22 ('JB', 360),23 ('科爾垃圾', 282),24 ('格林公式', 273),25 ('歐文', 2650),26]272829def wordcloud_base() -> WordCloud:30 c = (31 WordCloud()32 .add('', words, word_size_range=[20, 50], shape='diamond', word_gap=10)33 .set_global_opts(title_opts=opts.TitleOpts(title='WordCloud-shape-diamond'))34 )35 return c363738if __name__ == '__main__':39 wordcloud_base().render('wordCloud.html') 效果圖如下: ![]() NBA詞云圖 保存為圖片 前面我們講的幾種圖形生成方法,最后都保存成 html文件,pyecharts 還提供了保存為圖片的方式 需要安裝 snapshot_selenium,同時需要將瀏覽器驅(qū)動保存路徑 cheromdriver.exe 加入到環(huán)境變量中 1pip install snapshot_selenium 示例代碼如下: 1# coding: utf-8 2import random 3 4from pyecharts.charts import WordCloud 5from pyecharts import options as opts 6from snapshot_selenium import snapshot as driver 7from pyecharts.render import make_snapshot 8 9words = [10 ('火箭', 10000),11 ('勇士庫里', 8888),12 ('在你寫這個教程之前,我已經(jīng)會用了', 6181),13 ('哈登', 6386),14 ('金州拉文', 5055),15 ('杜蘭特', 6467),16 ('戳眼', 2244),17 ('NBA', 1868),18 ('季后賽', 1484),19 ('約老師', 1112),20 ('利拉德', 865),21 ('雙卡雙待', 847),22 ('字母歌MVP', 5582),23 ('卡哇伊', 555),24 ('猛龍', 550),25 ('大帝', 462),26 ('西蒙斯不投三分', 366),27 ('JB', 360),28 ('科爾垃圾', 282),29 ('格林公式', 273),30 ('歐文', 2650),31]323334def wordcloud_base() -> WordCloud:35 c = (36 WordCloud()37 .add('', words, word_size_range=[20, 50], shape='diamond', word_gap=10)38 .set_global_opts(title_opts=opts.TitleOpts(title='WordCloud-shape-diamond'))39 )40 return c414243if __name__ == '__main__':44 make_snapshot(driver, wordcloud_base().render(), 'wordcloud.png')45 # wordcloud_base().render('wordCloud.html') 最后會在當前目錄生成一張 wordcloud.png 的圖片 總結(jié) 1.根據(jù)自己想制作的圖形,導入相關(guān)的包 2.進行圖表的基礎(chǔ)設置,創(chuàng)建圖表對象 3.需要了解該圖表對象下面的函數(shù)中參數(shù)的含義,及其使用方法 4.配置項主要是在 options中進行配置,有全局配置項和系列配置項,需要了解配置項下面對象含義使用方法 5.利用render()方法來報存圖表 |
|
來自: flyk0tcfb46p9f > 《AI》