圖樣圖森破-Pyecharts之柱狀圖
pyecharts團隊將其支持的圖表類型歸納為以下幾個類型:基本圖表、直角坐標系圖表、樹型圖表、地理圖表、3D圖表、組合圖表。
對于分析師來講,我們日常工作中使用最多的當屬折線圖、柱狀圖、散點圖、箱型圖等直角坐標系圖表,當然還有屬于基本圖表的餅圖,餅圖及其衍生玫瑰圖在前一篇中已經介紹過了。本次我們一起來看下直角坐標系下的圖表:

(請忽略這土掉渣的配色,懶得查RGB了,直接用了顏色的單詞(blue,orange))
在pyecharts的charts模塊中,柱狀圖類名為Bar,與所有圖表類一樣,在創建Bar對象的時候,都有一個init_opts屬性,這是圖表的初始化項,可以通過options模塊中的InitOpts來設置。同樣的,折線圖類名為Line,初始化方法與柱狀圖一致,且添加數據項及配置項的參數也較為類似,我們僅以柱狀圖舉例。
1 圖表初始化
如圖所見,初始項中有很多個屬性可供設置,我們僅針對最常用和基礎的來進行介紹:
(1)前兩項width和height,分別為圖表區域整體的寬度和高度,默認值分別是900px和500px,可以根據實際需求來調整圖表大小;
(2)第三項chart_id是本圖表在html文件中唯一id,如果空置,會默認生成一個隨機字符串作為圖表id;
(3)page_tile是頁面整體的標題,并且只有當直接由此圖表render生成html文件時才會生效,如果是在將圖表添加到page類中,則文件標題只會根據page類中配置的名稱生成!注意是整個頁面的標題名稱,不是單個圖表哦,單個圖表標題的配置要在set_global函數中完成。
2 添加數據項
在創建完柱狀圖后,我們就可以添加數據項了,要用add_xaxis和add_xaxis兩個函數分別來添加x軸和y軸,其中x軸最為簡單,只有一個參數xaxis_data,可以是列表或數組等多種數據類型,但每個元素必須是字符串,否則在html中就可能出現無法顯示圖表的問題。而y軸配置項就復雜了許多,將常用項展示如下:
(1)首先是數據系列的名稱series_name,當有多個數據系列當時候用以區分不同顏色柱子柱子分別代表什么指標
(2)y_axis就是與x軸相對的y軸數據,同樣也是支持列表、數組等多種數據格式
(3)當有多個數據系列的時候,如果想要使用多個y軸來表示不同單位的指標,就需要使用yaxis_index來指定y軸的索引,本參數需要與extend_axis配合使用,本文末尾將會以復合圖表的形式來進行示范
(4)label_opts是對系列標簽進行設置,包括標簽字體、顏色、位置等,可以在添加每條數據系列時設置,也可以在set_series_opts中統一設置
(5)is_selected指的是在圖表初始化時是否選中本列數據;background_style是柱子的背景配置,有顏色、陰影、透明度、邊界等多項屬性;后面多項均是對柱子本身格式進行設置
(6)我們還可以利用markline_opts或markpoint_opts在圖表中添加標記線、標記點
(7)itemstyle_opts可以設置柱子格式,是對前面所看到的color等屬性的豐富和補充
3 其他設置
除了對x和y軸添加數據及配置外,柱狀圖還有另外兩個函數可以進行其他方面對配置:
(1)set_global_opts是全局配置項,全局指的是整個圖表區域,如標題、布局、工具箱、坐標軸等
(2) set_series_opts是系列配置,可以調整數據項的標簽、顯示等
(3)此外還有set_colors可以自定義各數據系列的顏色屬性
在本文第一張動圖中,演示了工具箱(toolbox_opts)的部分功能,其中包括柱狀圖和折線圖的轉換、圖形模式和數據模式的轉換,直接在工具箱中點擊操作即可,免去了多次作圖的麻煩;此外,直接坐標系下還可以使用datazoom縮放橫軸,當圖表可用區域較小、x軸范圍過大時,通過拖拽datazoom選擇要展示的數據范圍。
柱狀圖代碼示例
- 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')
可視化圖表最根本的目的是展示數據,將數據中包含的信息更加形象、具體地展示出來。一張看板或大屏好看與否雖然不會影響數據的真實性和準確性,但得體的布局、美觀的界面和生動的交互,帶來的不只是賞心悅目的觀看體驗,更多的是數據的可讀性的提升。