1. 程式人生 > >Python + PyEcharts——資料視覺化

Python + PyEcharts——資料視覺化

一、第一個PyEcharts圖示

以下示例都是在jupyter notebook環境下執行

1 安裝pip install pyecharts
2 引用pyecharts from pyecharts import Bar
3 編寫實現柱狀圖

bar = Bar('我的第一個圖示','副標題')
bar.add('服裝',['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子'],[5,20,36,10,75,90])

4 輸出到.html中進行展示:bar.render(.././html/bar01.html)
5 新建一個html檔案

程式碼:
import
pyecharts from pyecharts import Bar bar = Bar("我的第一個圖表", "這裡是副標題") bar.use_theme('dark') #暗色背景色 bar.add("服裝", #註解==label ["襯衫","羊毛衫","雪紡衫","褲子","高跟鞋","襪子"], #橫座標 [5, 20, 36, 10, 75, 90]) #縱座標
bar.render('./picture1.html') #檔案儲存路徑(預設儲存當前檔案路徑)
Bar
這裡寫圖片描述

二、柱形圖/條形圖

Bar.add()方法簽名
add(
    name,x_axis,y_axis,
    is_stack = False,
    bar_category_gap = '20%',**kwargs
    )
name -> str         #圖例名稱
x_axis -> list      # X軸資料
y_axis -> list      # Y軸資料
is_stack -> bool    #資料堆疊,同個類目軸上系列配置相同的stack 值可以堆疊放置
bar_category_gap -> int/str   #類目軸柱狀距離,預設20%
程式碼: 
from pyecharts import Bar
bar = Bar('基本柱狀圖','副標題')
bar.add('服裝',
        ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子'],
        [5,20,36,10,75,90],
        is_more_utils = True    #設定最右側工具欄
        )
bar.show_config()               #除錯輸出pyecharts的js配置資訊
bar.render('./html/first01.html')
這裡寫圖片描述

三、堆疊(柱狀)圖

程式碼:
from pyecharts import Bar

attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,75,90]
v2 = [10,25,8,60,20,80]
bar = Bar('柱狀資訊堆疊圖')
bar.add('商家A',attr,v1,is_stack = True)  #is_stack = True才表示堆疊在一起
bar.add('商家B',attr,v2,is_stack = True)
bar.render('./html/first03.html')   
這裡寫圖片描述
■ 並列(柱形)圖
from pyecharts import Bar

attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,75,90]
v2 = [10,25,8,60,20,80]
bar = Bar('標記線和標記示例')
bar.add('商家A',attr,v1,mark_point = ['average'])     #標記點:商家A的平均值
bar.add('商家B',attr,v2,mark_line = ['min','max'])    #標記線:商家B最小/最大值
bar.render('./html/first04.html')

這裡寫圖片描述

■ 橫向並列(柱形)圖 
from pyecharts import Bar

attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,75,90]
v2 = [10,25,8,60,20,80]
bar = Bar('X 軸與 Y 軸交換')
bar.add('商家A',attr,v1)  
bar.add('商家B',attr,v2,is_convert = True)    # is_convert = True:X 軸與 Y 軸交換
bar.render('./html/first04.html')   
這裡寫圖片描述

四、折線/面積圖

Line.add()方法簽名
add(
    name,x_axis,y_axis,
    is_symbol_show = True,
    is_smooth = False,
    is_stack = False,
    is_step = False,
    is_fill = False,**kwargs    
    )
以下為屬性預設值:
    is_symbol_show = True,      #是否顯示標記圖形
    is_smooth = False,          #是否顯示平滑曲線
    is_stack = False,           #是否資料堆疊
    is_step = False,            #是否是階梯線
    is_fill = False,**kwargs    #是否填充曲線區域面積
▶程式碼1from pyecharts import Line

attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,75,90]
v2 = [10,25,8,60,20,80]
line = Line('折線示例圖')
line.add('商家A',attr,v1,mark_point = ['average'])    
line.add('商家B',attr,v2,is_smooth = True, mark_line = ['max','average'])
line.render('./html/first05.html')
 --------------------------------------------------------------
▶程式碼2:(定製折線圖)    
from pyecharts import Line

attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,75,90]
v2 = [10,25,8,60,20,80]
line = Line('折線示例圖')
line.add('商家A',attr,v1,
    mark_point = ['average','max','min'],  #標註點:平均值,最大值,最小值
    mark_point_symbol = 'diamond',         #標註點:鑽石形狀
    mark_point_textcolor = '#40ff27')      #標註點:標註文字顏色
line.add('商家B',attr,v2,mark_point = ['average','max','min'],
    mark_point_symbol = 'arrow',
    mark_point_symbolsize = 40)
line.render('./html/line01.html')
這裡寫圖片描述
▶程式碼3:(面積圖)  
from pyecharts import Line

attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,75,90]
v2 = [10,25,8,60,20,80]
line = Line('折線面積示例圖')
line.add('商家A',attr,v1,is_fill = True,
    line_opacity = 0.2,      #線條不透明度
    area_opacity = 0.4,
    symbol = None)  
line.add('商家B',attr,v2,is_fill = True,
    line_color = '#000',     #黑色
    area_opacity = 0.3,      #填充不透明度
    is_smooth = True)
line.render('./html/area01.html')   
這裡寫圖片描述

五、餅圖

Pie.add()方法簽名
add(name,attr,value,radius = None,center = None,rosetype = None,**kwargs)
attr:屬性名稱
radius:餅圖半徑,陣列第一項是內徑,第二項是外徑,預設[0,75,],設定成百分比
center:圓心,陣列第一項是X軸,第二項是Y軸,預設[50,50]
rosetype: 是否展示成南丁格爾圖,用過半徑區分資料大小,radius和area兩種模式,預設radius
▶程式碼1:(餅圖)
from pyecharts import Pie

attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,75,90]
pie = Pie('餅圖示例')
pie.add('',attr,v1,is_label_show = True)
pie.render('./html/pie01.html') 

▶程式碼2:(環形圖)
from pyecharts import Pie

attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,75,90]
pie = Pie('餅圖-環形圖示例',title_pos = 'center')
pie.add(
        '',attr,v1,                 #'':圖例名(不使用圖例)
        radius = [40,75],           #環形內外圓的半徑
        is_label_show = True,       #是否顯示標籤
        label_text_color = None,    #標籤顏色
        legend_orient = 'vertical', #圖例垂直
        legend_pos = 'left'
        )
pie.render('./html/pie02.html') 
這裡寫圖片描述

六、散點圖

Scatter.add()方法簽名
add(name,x_axis,y_axis,extra_data = None,symbol_size = 10,**kwargs)
extra_data -> int:第三維資料(可在 visualmap 中將檢視元素對映到第三維度)
symbol_size -> int: 標記圖形大小,預設為10
▶程式碼1from pyecharts import Scatter
v1 = [5,20,35,50,65,80]
v2 = [10,20,30,40,50,60]
scatter = Scatter('散點示例圖')
scatter.add('A',v1,v2)
scatter.add('B',v1[::-1],v2)    #v1[::-1]代表切片倒序
scatter.render('./html/scatter01.html')     

▶程式碼2:(引入第三維/類似氣泡圖)
from pyecharts import Scatter
v1 = [5,20,35,50,65,80]
v2 = [10,20,30,40,50,60]
scatter = Scatter('散點-氣泡示例圖')
scatter.add('A',v1,v2)
scatter.add('B',v1[::-1],v2,                #v1[::-1]代表切片倒序
            is_visualmap = True,            #顯示滑動條
            symbol_size = 30,               #顯示圖內標點大小
            vasual_range_size = [20,80])    #顯示滑動範圍
scatter.render('./html/scatter02.html')         
這裡寫圖片描述
Map.add() 方法簽名
 安裝下列地圖資料包
 pip install echarts-countries-pypkg
 pip install echarts-china-provinces-pypkg
 pip install echarts-china-cities-pypkg
 pip install echarts-china-counties-pypkg
 pip install echarts-china-misc-pypkg
 pip install echarts-united-kingdom-pypkg
add(
    name,attr,value,
    maptype = 'china',
    is_roam = True,
    is_map_symobol_show = True 
    **kwargs
    )
maptype -> str: 地圖型別,支援China,world,北京,天津,上海,湖南,湖北,……363個二線城市
is_roam -> bool/str 是否開啟滑鼠縮放,漫遊等,預設 True,
                    若只想開啟縮放/平移 設定scale/move 設定成 True 開啟
is
is_map_symobol_show 是否顯示地圖示記,預設 True。
▶程式碼1from pyecharts import Map
value = [155,10,66,78]
attr = ['福建','山東','北京','上海']
map = Map('全國地圖示例',width = 1200,height = 600)
map.add('',attr,value,maptype = 'china')
map.render('./html/map01.html')

▶程式碼2from pyecharts import Map
value = [155,10,66,78]
attr = ['汕頭市','汕尾市','揭陽市','肇慶市']
map = Map('廣東地圖示例',width = 1200,height = 600)
map.add('',attr,value,maptype = '廣東',
        is_visualmap = True,
        visual_text_color = '#000',
        is_label_show = True
        )
map.render('./html/map02.html') 
這裡寫圖片描述

八、詞雲圖

WordCloud.add() 方法簽名
add(
    name,attr,value,
    shape = 'circle',
    word_gap = 20,
    word_size_range = None
    rotate_step = 45
    )
shape-> list :詞雲圖輪廓(circle,cardioid,diamond,triangle-forward,triangle,pentagon,star)
word_gap -> int 單詞間隔 預設 20
word_size_range -> int 單詞字型大小範圍 預設[12,60]
rotate_step -> int 單詞旋轉角度,預設45。
from pyecharts import WordCloud
name = [
        'Though','the answer','this question',
        'may at first','seem to border','on the',
        'absurd','reflection','will show','that there',
        'is a','good deal','more in','it than meets','the eye'
        ]
value = [10000,6189,4556,2356,2233,
         1895,1456,1255,981,875,
         542,462,361,265,125]
worldcloud = WordCloud(width = 1300,height = 620)
worldcloud.add('',name,value,word_size_range = [20,100])
worldcloud.render('./html/worldcloud01.html')
這裡寫圖片描述

九、圖示疊加 Overlap

自定義結合Line/ Bar/ Kline/ Scatter/ EffectScatter 等圖表。
利用第一張圖表為基礎,將後面的資料畫在第一張圖上。

Overlap.add() 方法簽名
add(chart,
    xaxis_index = 0,
    yaxis_index = 0,
    is_add_xaxis = False,
    is_add_yaxis = False)
屬性:
is_add_xaxis / is_add_yaxis 是否新增座標X/Y 預設 False 
▶程式碼1:bar + line 疊加

from pyecharts import Bar,Line,Overlap
attr = ['A','B','C','D','E','F']
v1 = [10,20,30,40,50,60]
v2 = [38,28,35,58,65,70]
bar = Bar('Line - Bar示例')
bar.add('bar',attr,v1)
line = Line()
line.add('line',attr,v2)

overlop = Overlap()
overlop.add(bar)
overlop.add(line)
overlop.render('./html/line-bar01.html')
這裡寫圖片描述
▶程式碼2:EffectScatter + Line 疊加
from pyecharts import Line,EffectScatter,Overlap
attr = ['襯衫','羊毛衫','雪紡衫','褲子','高跟鞋','襪子']
v1 = [5,20,36,10,10,90]
line = Line('線性_閃爍圖示例')
line.add('',attr,v1,is_random = True)

es = EffectScatter()
es.add('',attr,v1,effect_scale=8)   #閃爍
overlop = Overlap()
overlop.add(line)                   #必須先新增line,在新增es
overlop.add(es)
overlop.render('./html/line-es01.html')
這裡寫圖片描述