圖樣圖森破-Pyecharts之柱狀圖
pyecharts團隊將其支持的圖表類型歸納為以下幾個類型:基本圖表、直角坐標系圖表、樹型圖表、地理圖表、3D圖表、組合圖表。
對于分析師來講,我們?nèi)粘9ぷ髦惺褂米疃嗟漠攲僬劬€圖、柱狀圖、散點圖、箱型圖等直角坐標系圖表,當然還有屬于基本圖表的餅圖,餅圖及其衍生玫瑰圖在前一篇中已經(jīng)介紹過了。本次我們一起來看下直角坐標系下的圖表:

(請忽略這土掉渣的配色,懶得查RGB了,直接用了顏色的單詞(blue,orange))
在pyecharts的charts模塊中,柱狀圖類名為Bar,與所有圖表類一樣,在創(chuàng)建Bar對象的時候,都有一個init_opts屬性,這是圖表的初始化項,可以通過options模塊中的InitOpts來設(shè)置。同樣的,折線圖類名為Line,初始化方法與柱狀圖一致,且添加數(shù)據(jù)項及配置項的參數(shù)也較為類似,我們僅以柱狀圖舉例。
1 圖表初始化
如圖所見,初始項中有很多個屬性可供設(shè)置,我們僅針對最常用和基礎(chǔ)的來進行介紹:
(1)前兩項width和height,分別為圖表區(qū)域整體的寬度和高度,默認值分別是900px和500px,可以根據(jù)實際需求來調(diào)整圖表大小;
(2)第三項chart_id是本圖表在html文件中唯一id,如果空置,會默認生成一個隨機字符串作為圖表id;
(3)page_tile是頁面整體的標題,并且只有當直接由此圖表render生成html文件時才會生效,如果是在將圖表添加到page類中,則文件標題只會根據(jù)page類中配置的名稱生成!注意是整個頁面的標題名稱,不是單個圖表哦,單個圖表標題的配置要在set_global函數(shù)中完成。
2 添加數(shù)據(jù)項
在創(chuàng)建完柱狀圖后,我們就可以添加數(shù)據(jù)項了,要用add_xaxis和add_xaxis兩個函數(shù)分別來添加x軸和y軸,其中x軸最為簡單,只有一個參數(shù)xaxis_data,可以是列表或數(shù)組等多種數(shù)據(jù)類型,但每個元素必須是字符串,否則在html中就可能出現(xiàn)無法顯示圖表的問題。而y軸配置項就復雜了許多,將常用項展示如下:
(1)首先是數(shù)據(jù)系列的名稱series_name,當有多個數(shù)據(jù)系列當時候用以區(qū)分不同顏色柱子柱子分別代表什么指標
(2)y_axis就是與x軸相對的y軸數(shù)據(jù),同樣也是支持列表、數(shù)組等多種數(shù)據(jù)格式
(3)當有多個數(shù)據(jù)系列的時候,如果想要使用多個y軸來表示不同單位的指標,就需要使用yaxis_index來指定y軸的索引,本參數(shù)需要與extend_axis配合使用,本文末尾將會以復合圖表的形式來進行示范
(4)label_opts是對系列標簽進行設(shè)置,包括標簽字體、顏色、位置等,可以在添加每條數(shù)據(jù)系列時設(shè)置,也可以在set_series_opts中統(tǒng)一設(shè)置
(5)is_selected指的是在圖表初始化時是否選中本列數(shù)據(jù);background_style是柱子的背景配置,有顏色、陰影、透明度、邊界等多項屬性;后面多項均是對柱子本身格式進行設(shè)置
(6)我們還可以利用markline_opts或markpoint_opts在圖表中添加標記線、標記點
(7)itemstyle_opts可以設(shè)置柱子格式,是對前面所看到的color等屬性的豐富和補充
3 其他設(shè)置
除了對x和y軸添加數(shù)據(jù)及配置外,柱狀圖還有另外兩個函數(shù)可以進行其他方面對配置:
(1)set_global_opts是全局配置項,全局指的是整個圖表區(qū)域,如標題、布局、工具箱、坐標軸等
(2) set_series_opts是系列配置,可以調(diào)整數(shù)據(jù)項的標簽、顯示等
(3)此外還有set_colors可以自定義各數(shù)據(jù)系列的顏色屬性
在本文第一張動圖中,演示了工具箱(toolbox_opts)的部分功能,其中包括柱狀圖和折線圖的轉(zhuǎn)換、圖形模式和數(shù)據(jù)模式的轉(zhuǎn)換,直接在工具箱中點擊操作即可,免去了多次作圖的麻煩;此外,直接坐標系下還可以使用datazoom縮放橫軸,當圖表可用區(qū)域較小、x軸范圍過大時,通過拖拽datazoom選擇要展示的數(shù)據(jù)范圍。
柱狀圖代碼示例
- from pyecharts import options
 - from pyecharts import charts
 - import random
 - bar = charts.Bar(init_opts=options.InitOpts(width='900px', height='400px'))
 - bar.set_global_opts(title_opts=options.TitleOpts(title='2019年AB商品銷量對比', pos_left='center'),
 - legend_opts=options.LegendOpts(is_show=True, pos_right='right', pos_top='center',
 - orient='vertical'), toolbox_opts=options.ToolboxOpts(is_show=True)
 - , brush_opts=options.BrushOpts(tool_box='clear'), datazoom_opts=options.DataZoomOpts(is_show=True))
 - y1 = [random.randrange(500, 1000) for i in range(12)]
 - y2 = [random.randrange(800, 1200) for i in range(12)]
 - bar.add_xaxis(['{}月'.format(x) for x in range(1, 13)])
 - bar.add_yaxis(series_name='商品A', y_axis=y1,
 - label_opts=options.LabelOpts(is_show=True, position='left', color='blue'),
 - bar_width=20, markline_opts=options.MarkLineOpts(data=[options.MarkLineItem(y=max(y1))]),
 - background_style=options.BarBackgroundStyleOpts(color='rgba(180,180,180,0.2)', border_width=1,
 - border_color='grey'),
 - is_show_background=True)
 - bar.add_yaxis(series_name='商品B', y_axis=y2,
 - label_opts=options.LabelOpts(is_show=False),
 - bar_width=20, markline_opts=options.MarkLineOpts(data=[options.MarkLineItem(y=max(y2))]),
 - background_style=options.BarBackgroundStyleOpts(color='rgba(180,180,180,0.2)', border_width=1,
 - border_color='grey'),
 - is_show_background=True)
 - bar.set_colors(colors=['blue', 'orange'])
 - bar.render('bar.html')
 
可視化圖表最根本的目的是展示數(shù)據(jù),將數(shù)據(jù)中包含的信息更加形象、具體地展示出來。一張看板或大屏好看與否雖然不會影響數(shù)據(jù)的真實性和準確性,但得體的布局、美觀的界面和生動的交互,帶來的不只是賞心悅目的觀看體驗,更多的是數(shù)據(jù)的可讀性的提升。


















 
 
 









 
 
 
 