圖樣圖森破-pyecharts之時間軸
在可視化工作中,我們通常會根據數據的維度分類來制作圖表,比如用戶性別、年齡段、地區等自然屬性,抑或是用戶等級、活躍程度、是否付費等行為屬性。這時就需要把各屬性值組合在一起進行比較,但量少了還好說,一旦屬性值過多,很容易使得繪圖區混亂擁擠,嚴重影響數據的表達效果。
當我們面對這種情況時,一般會采取刪減不重要、不必要的數據項或者增加圖表數量,此外也確實沒有什么多么高效的解決方案。
下面我們為大家介紹一下pyecharts中是如何利用時間軸來組合多個圖表的。
顧名思義,時間軸就是一條軸,上面有多個節點,狹義上可以把每個節點理解為年、月、日等時間節點,當然引申一下它還可以表示除時間以外的其他屬性。
舉個例子
有A-J一共10個商品品類,每個品類下面有5個商品,我們要展示這10*5個商品2020年每個月的銷量,數據如下圖

10個品類倒并不算多,但是每個品類下又有5個商品,兩個維度較差后就成了50個,如果我們把這50個全都放在一張圖里,肯定是密密麻麻難以區分。所以我們使用時間軸的方式,把品類和商品兩個維度分別表示。
看看效果

如上圖效果,可以簡單地理解為每個品類做一張圖,每張圖里用5條曲線表示每個商品,最后將這10張圖疊加到一起。最下面的組件即為時間軸,軸上10個點分別表示對應的品類,點擊即可切換。
如何實現
- import pandas as pd
- import numpy as np
- from pyecharts import charts, options
- data = pd.read_excel('商品銷量.xlsx')
- timeline = charts.Timeline(init_opts=options.InitOpts(width='1200px', height='600px'))
- timeline.add_schema(axis_type='category', orient='horizontal', symbol='circle', symbol_size=10,
- play_interval=3000, is_auto_play=True, is_loop_play=True, is_timeline_show=True,
- control_position='left', pos_left='10%', pos_bottom='0%', width='800px', height='30px')
- for i in list(set(data['品類'])):
- line = charts.Line(init_opts=options.InitOpts(width='1200px', height='600px'))
- line.add_xaxis([str(x) for x in range(1, 13)])
- line.set_global_opts(
- title_opts=options.TitleOpts('各商品銷量趨勢圖', pos_left='50%'),
- legend_opts=options.LegendOpts(is_show=True, pos_top='50%', pos_right='0%', orient='vertical'))
- for j in list(set(data.loc[data['品類'] == i, '商品'])):
- line.add_yaxis(series_name=j,
- y_axis=list(data.loc[np.array(data['品類'] == i) & np.array(data['商品'] == j), '銷量']))
- timeline.add(chart=line, time_point=i)
- timeline.render('timeline.html')
這都是啥玩意兒
第一步,讀取excel文件不必多說。
然后就是創建時間軸對象,和普通圖表類型一樣進行初始化配置,我們這里只設置高和寬。接下來是設置時間軸的相關屬性:
1.axis_type表示時間軸類型,值可以是value(連續數值型)、category(離散型)、time(時間),如果是time,程序會自動計算時間間隔選擇合適的顯示格式,此處我們適用的是category
2.orient是時間軸的放置方向,取值為vertical(垂直)或horizontal(水平)
3.symbol用來定義時間軸上節點的圖標,如:'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'
4.symbol_size控制節點圖標的大小
5.時間軸會附帶一個播放按鈕,點擊可以播放和暫停,使用play_interval來控制節點的切換時間間隔,單位是毫秒
6.將is_auto_play設置為True,頁面打開后將會自動播放
7.is_loop_play則表示循環播放
8.is_timeline_show就是頁面是否顯示時間軸組建
9.control_position是播放按鈕的位置,left、right
10.pos_left、pos_right、pos_top、pos_bottom則是控制時間軸位置的參數,分別表示時間軸離容器左、右、上、下側的距離,可以是百分比也可以是絕對值
11.height和width就是時間軸的高度和寬度
時間軸屬性配置完成后,使用循環的方式,把每次創建的圖表對象line添加到timeline上即可。這里只是以折線圖為例,實際上時間軸可以對多種圖表類型進行組合,比如多個餅圖、多個地圖,或者是不同圖表類型之間也可以在同一個時間軸中實現自由切換。
看到這里,大家應該明白,時間軸其實就是類似于excel中切片器的一個篩選工具,是將多個圖表疊加在一起,然后手動或自動切換每個圖表。這樣的好處是,在有限的畫圖區域盡可能清晰有序地展示出所有信息。