| 
 作者:劉早起早起 來源:早起Python 提到用python進(jìn)行數(shù)據(jù)可視化,那么大多數(shù)人選擇都是matplotlib,但是生成的圖表不能進(jìn)行交互操作,比如時間軸拖動、交互式圖例等,那么本文將對pyecharts進(jìn)行詳細(xì)講解。目前pyecharts已經(jīng)更新到1.x版本,而1.x版本與0.5.x版本在構(gòu)圖語法上有很大的不一樣,1.x的版本語法更靠近Echarts,但是方便理解的還是0.5.x版本,所以本文基于pyecharts 0.5.11版本進(jìn)行講解。大部分示例來自官方文檔,并添加注釋。建議打開jupyter notebook邊敲邊學(xué)。 可以使用 pip install pyecharts==0.5.11的方式來安裝。
 那么在詳解講解各個圖表怎樣繪制之前,先講一下pyecharts繪制的基本步驟(套路)?? 
 柱狀/條形圖,通過柱形的高度/條形的寬度來表現(xiàn)數(shù)據(jù)的大小。
 直接看代碼就行,所有內(nèi)容會在代碼里面注釋
 is_stack 實現(xiàn)數(shù)據(jù)堆疊 from pyecharts import Bar #導(dǎo)入bar模塊
 attr = ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子'] #設(shè)置x軸數(shù)據(jù)
 v1 = [5, 20, 36, 10, 75, 90] #第一組數(shù)據(jù)
 v2 = [10, 25, 8, 60, 20, 80] #第二組數(shù)據(jù)
 bar = Bar('柱狀圖數(shù)據(jù)堆疊示例') #實例一個柱狀圖
 bar.add('商家A', attr, v1, is_stack=True) #用add函數(shù)往圖里添加數(shù)據(jù)并設(shè)置堆疊
 bar.add('商家B', attr, v2, is_stack=True)
 bar.render() #展示數(shù)據(jù)
 
 使用標(biāo)記點和標(biāo)記線 from pyecharts import Bar
 bar = Bar('標(biāo)記線和標(biāo)記點示例')
 bar.add('商家A', attr, v1, mark_point=['average']) #設(shè)置標(biāo)記點
 bar.add('商家B', attr, v2, mark_line=['min', 'max']) #設(shè)置標(biāo)記線
 bar.render()
 
 is_convert 交換 XY 軸 from pyecharts import Bar
 bar = Bar('x 軸和 y 軸交換')
 bar.add('商家A', attr, v1)
 bar.add('商家B', attr, v2, is_convert=True) #設(shè)置交換XY軸
 bar.render()
 
 dataZoom 效果,'slider' 類型 import random
 attr = ['{}天'.format(i) for i in range(30)]
 v1 = [random.randint(1, 30) for _ in range(30)] #創(chuàng)建數(shù)據(jù)
 bar = Bar('Bar - datazoom - slider 示例')
 bar.add('', attr, v1, is_label_show=True, is_datazoom_show=True) #設(shè)置datazoom
 bar.render()
 
 
 多 dataZoom 效果,效果同時支持 X、Y 軸 days = ['{}天'.format(i) for i in range(30)]days_v1 = [random.randint(1, 30) for _ in range(30)]
 bar = Bar('Bar - datazoom - xaxis/yaxis 示例')
 bar.add(
 '',
 days,
 days_v1,
 # 默認(rèn)為 X 軸,橫向
 is_datazoom_show=True,
 datazoom_type='slider',
 datazoom_range=[10, 25],
 # 新增額外的 dataZoom 控制條,縱向
 is_datazoom_extra_show=True,
 datazoom_extra_type='slider',
 datazoom_extra_range=[10, 25],
 is_toolbox_show=False,
 )
 bar.render()
 
 設(shè)置 grid3d_shading可以讓柱狀更真實 bar3d = Bar3D('3D 柱狀圖示例', width=1200, height=600)bar3d.add(
 '',
 x_axis,
 y_axis,
 [[d[1], d[0], d[2]] for d in data],
 is_visualmap=True,
 visual_range=[0, 20],
 visual_range_color=range_color,
 grid3d_width=200,
 grid3d_depth=80,
 grid3d_shading='lambert',
 )
 bar3d.render()
 
 標(biāo)簽顯示在內(nèi)部 from pyecharts import Funnel #導(dǎo)入漏斗圖
 attr = ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']
 value = [20, 40, 60, 80, 100, 120]
 funnel = Funnel('漏斗圖示例')
 funnel.add(
 '商品',
 attr,
 value,
 is_label_show=True, #顯示標(biāo)簽
 label_pos='inside', #標(biāo)簽位置
 label_text_color='#fff', #顏色
 )
 funnel.render()
 
 標(biāo)簽顯示在外部 funnel = Funnel('漏斗圖示例', width=600, height=400, title_pos='center')funnel.add(
 '商品',
 attr,
 value,
 is_label_show=True,
 label_pos='outside',
 legend_orient='vertical',
 legend_pos='left',
 )
 funnel.render()
 
 from pyecharts import Gauge #和之前一樣 ,導(dǎo)入相關(guān)繪圖包
 gauge = Gauge('儀表盤示例') #標(biāo)題
 gauge.add('業(yè)務(wù)指標(biāo)', '完成率', 66.66) #數(shù)據(jù)
 gauge.render()
 
 from pyecharts import Line #導(dǎo)入相關(guān)折線圖
 attr = ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']
 v1 = [5, 20, 36, 10, 10, 100]
 v2 = [55, 60, 16, 20, 15, 80] #設(shè)置數(shù)據(jù)
 line = Line('折線圖示例') #創(chuàng)建一個實例
 line.add('商家A', attr, v1, mark_point=['average']) #添加數(shù)據(jù)和標(biāo)記點
 line.add('商家B', attr, v2, is_smooth=True, mark_line=['max', 'average'])
 line.render()
 
 標(biāo)記點其他配置 line = Line('折線圖示例')line.add(
 '商家A',
 attr,
 v1,
 mark_point=['average', {'coord': ['褲子', 10], 'name': '這是我想要的第一個標(biāo)記點'}],
 ) #添加第一組數(shù)據(jù)
 line.add(
 '商家B',
 attr,
 v2,
 is_smooth=True,
 mark_point=[{'coord': ['襪子', 80], 'name': '這是我想要的第二個標(biāo)記點'}],
 ) #添加第二組數(shù)據(jù)
 line.render()
 
 使用 area_opacity繪制面積圖 line = Line('折線圖-面積圖示例')line.add(
 '商家A',
 attr,
 v1,
 line_opacity=0.2,
 area_opacity=0.4,
 symbol=None,
 )
 line.add(
 '商家B',
 attr,
 v2,
 is_fill=True,
 area_color='#000',
 area_opacity=0.3, #設(shè)置面積
 is_smooth=True,
 )
 line.render()
 
 畫個彈簧 from pyecharts import Line3D
 import math
 _data = []
 for t in range(0, 25000):
 _t = t / 1000
 x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)
 y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)
 z = _t + 2.0 * math.sin(75 * _t)
 _data.append([x, y, z])
 range_color = [
 '#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',
 '#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
 line3d = Line3D('3D 折線圖示例', width=1200, height=600)
 line3d.add(
 '',
 _data,
 is_visualmap=True,
 visual_range_color=range_color,
 visual_range=[0, 30],
 is_grid3d_rotate=True,
 grid3d_rotate_speed=180,
 )
 line3d.render()
 
 餅圖主要表現(xiàn)不同類目的數(shù)據(jù)在總和中占比。每個的弧度表示數(shù)據(jù)數(shù)量的比例。
 餅圖示例
 from pyecharts import Pie
 attr = ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']
 v1 = [11, 12, 13, 10, 10, 10]
 pie = Pie('餅圖示例')
 pie.add('', attr, v1, is_label_show=True) #顯示標(biāo)簽
 pie.render()
 
 調(diào)整圓環(huán) from pyecharts import Pie
 attr = ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']
 v1 = [11, 12, 13, 10, 10, 10]
 pie = Pie('餅圖-圓環(huán)圖示例', title_pos='center') ¥創(chuàng)建餅圖
 pie.add(
 '',
 attr,
 v1,
 radius=[40, 75], #設(shè)置兩個環(huán)大小
 label_text_color=None,
 is_label_show=True,
 legend_orient='vertical',#垂直顯示圖例
 legend_pos='left',#圖例放在左邊
 )
 pie.render()
 
 餅圖-玫瑰圖 from pyecharts import Pie
 attr = ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']
 v1 = [11, 12, 13, 10, 10, 10]
 v2 = [19, 21, 32, 20, 20, 33]
 pie = Pie('餅圖-玫瑰圖示例', title_pos='center', width=900)
 pie.add(
 '商品A',
 attr,
 v1,
 center=[25, 50],
 is_random=True,
 radius=[30, 75],
 rosetype='radius',
 )
 pie.add(
 '商品B',
 attr,
 v2,
 center=[75, 50],
 is_random=True,
 radius=[30, 75],
 rosetype='area',
 is_legend_show=False,
 is_label_show=True,
 )
 pie.render()
 
 
 全國地圖(結(jié)合 VisualMap) from pyecharts import Map
 value = [155, 10, 66, 78, 33, 80, 190, 53, 49.6]
 attr = [
 '福建', '山東', '北京', '上海', '甘肅', '新疆', '河南', '廣西', '西藏'
 ]
 map = Map('Map 結(jié)合 VisualMap 示例', width=1200, height=600)
 map.add(
 '',
 attr,
 value,
 maptype='china', #設(shè)置中國
 is_visualmap=True,
 visual_text_color='#000',
 )
 map.render()
 
 分省地圖 from pyecharts import Map
 value = [20, 190, 253, 77, 65]
 attr = ['汕頭市', '汕尾市', '揭陽市', '陽江市', '肇慶市']
 map = Map('廣東地圖示例', width=1200, height=600)
 map.add(
 '', attr, value, maptype='廣東', is_visualmap=True, visual_text_color='#000'
 ) #設(shè)置廣東省
 map.render()
 
 世界地圖 value = [95.1, 23.2, 43.3, 66.4, 88.5]attr= ['China', 'Canada', 'Brazil', 'Russia', 'United States']
 map = Map('世界地圖示例', width=1200, height=600)
 map.add(
 '',
 attr,
 value,
 maptype='world', #設(shè)置世界地圖
 is_visualmap=True,
 visual_text_color='#000',
 )
 map.render()
 
 from pyecharts import WordCloud
 name = [
 'Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications',
 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp',
 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham',
 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']
 value = [
 10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112,
 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]
 wordcloud = WordCloud(width=1300, height=620)
 wordcloud.add('', name, value, word_size_range=[20, 100]) #設(shè)置大小
 wordcloud.render()
 
 一些在數(shù)據(jù)可視化中會涉及到的基本圖表都在上面,繪制方法也基本上一致:創(chuàng)建一個需要的實例,然后往里面添加各種數(shù)據(jù)與配置就可以了,那么最后再來回顧一下使用pyecharts繪制圖表的一般步驟: 
 -------------------End------------------- 
                                     |