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

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