这篇文章主要介绍了Python数据可视化 pyecharts实现各种统计图表过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
1、pyecharts介绍
Echarts是一款由百度公司开发的开源数据可视化JS库,pyecharts是一款使用python调用echarts生成数据可视化的类库,可实现柱状图,折线图,饼状图,地图等统计图表。
2、柱状图
适用场合是二维数据集(每个数据点包括两个值x和y),但只有一个维度需要比较,用于显示一段时间内的数据变化或显示各项之间的比较情况。
优点: 利用柱子的高度,反映数据的差异,肉眼对高度差异很敏感。
缺点: 只适用中小规模的数据集。
柱状图最基本用法
1 2 3 4 5 6 |
from pyecharts import Bar fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] sales = [ 18888 , 20023 , 30989 , 8873 , 29876 , 5409 ] bar = Bar( '水果销售情况' ) bar.add('',fruits,sales,is_stack = True ) (bar.render()) |

add()方法用于添加数据。
当要比较不同商家水果销量情况,只需多次调用add()方法:
1 2 3 4 5 6 7 8 |
from pyecharts import Bar fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] shop1_sales = [ 8888 , 3323 , 6989 , 8873 , 3876 , 15409 ] bar = Bar( '水果销售情况' ) bar.add( '商家A' ,fruits,shop1_sales,is_stack = False ) shop2_sales = [ 4888 , 7023 , 3989 , 5873 , 8876 , 6409 ] bar.add( '商家B' ,fruits,shop2_sales,is_stack = False ) bar.render() |

如果想在数据叠加显示,只需将is_stack参数设置为True
1 2 3 4 5 6 7 8 |
from pyecharts import Bar fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] shop1_sales = [ 8888 , 3323 , 6989 , 8873 , 3876 , 15409 ] bar = Bar( '水果销售情况' ) bar.add( '商家A' ,fruits,shop1_sales,is_stack = True ) shop2_sales = [ 4888 , 7023 , 3989 , 5873 , 8876 , 6409 ] bar.add( '商家B' ,fruits,shop2_sales,is_stack = True ) bar.render() |

下面是柱状图中常用方法和属性介绍:
(1)add()方法中根据is_stack可以设定柱形图是否叠加显示
(2)is_more_utils=True 参数来设置最右侧工具栏,对生成的图进行更多的操作,如将柱形图更改为折线图等
(3)标记的使用:mark_point=[‘average']标记点,平均值;mark_line=[‘min','max','average']标记线,最大值、最小值和平均值
(4)横向柱形图:is_convert=True,标识交换X轴和Y轴
3、折线图
常用折线图来描绘统计事项总体指标的动态、研究对象间的依存关系以及总体中各部分的分配情况等。
1 2 3 4 5 6 7 8 9 10 |
# 普通折线图 fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] shop1_sales = [ 8888 , 3323 , 6989 , 8873 , 3876 , 15409 ] shop2_sales = [ 4888 , 7023 , 3989 , 5873 , 8876 , 6409 ] line = Line( '折线图' ) line.add( '商家A' , fruits, shop1_sales, mark_point = [ 'max' ]) line.add( '商家B' , fruits, shop2_sales, mark_point = [ 'min' ]) line.show_config() line.render() |

line()方法中有个is_smooth的参数,将参数的值设置为True,折线图的线条会以圆滑的趋势变化,不像上图那样以直线的方式变化。
1 2 3 4 5 6 7 8 9 10 |
# 普通折线图 fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] shop1_sales = [ 8888 , 3323 , 6989 , 8873 , 3876 , 15409 ] shop2_sales = [ 4888 , 7023 , 3989 , 5873 , 8876 , 6409 ] line = Line( '折线图' ) line.add( '商家A' , fruits, shop1_sales, mark_point = [ 'max' ]) line.add( '商家B' , fruits, shop2_sales, mark_point = [ 'min' ], is_smooth = True ) line.show_config() line.render() |

上图的商家A设置了is_smooth参数的值为True,商家B没有设置is_smooth属性。可以看到商家B的折线是以圆滑的趋势变化的。
最常用的还有阶梯折线图和面积折线图。
阶梯折线图
将line()方法的is_step参数设置为True。
1 2 3 4 5 6 7 |
fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] shop2_sales = [ 4888 , 7023 , 3989 , 5873 , 8876 , 6409 ] line = Line( '折线图' ) line.add( '商家B' , fruits, shop2_sales, mark_point = [ 'min' ], is_step = True ) line.show_config() line.render() |

面积折线图
1 2 3 4 5 6 7 8 |
fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] shop2_sales = [ 4888 , 7023 , 3989 , 5873 , 8876 , 6409 ] shop1_sales = [ 8888 , 3323 , 6989 , 8873 , 3876 , 15409 ] line3 = Line( "面积折线图" ) line3.add( "商家A" , fruits, shop1_sales, is_fill = True , line_opacity = 0.2 , area_opacity = 0.4 , symbol = None , mark_point = [ 'max' ]) line3.add( "商家B" , fruits, shop2_sales, is_fill = True , area_color = '#a3aed5' , area_opacity = 0.3 , is_smooth = True ) line3.show_config() line3.render() |

柱状图-折线图
在柱状图上显示折线图也是常用的统计图表。需要借助Overlap类实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
from pyecharts import Bar, Line, Overlap fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] shop1_sales = [ 8888 , 3323 , 6989 , 8873 , 3876 , 15409 ] shop2_sales = [ 4888 , 7023 , 3989 , 5873 , 8876 , 6409 ] bar = Bar( "柱形图-折线图" ) bar.add( 'bar' , fruits, shop1_sales) line = Line() line.add( 'line' , fruits, shop2_sales) overlap = Overlap() overlap.add(bar) overlap.add(line) overlap.show_config() overlap.render() |

4、饼图
饼图可以比较清楚地反映出部分与部分、部分与整体之间的数量关系.易于显示每组数据相对于总数的大小.而且显现方式直观.
1 2 3 4 5 6 7 |
from pyecharts import Pie fruits = [ '苹果' , '香蕉' , '凤梨' , '桔子' , '橙' , '桃子' ] shop1_sales = [ 8888 , 3323 , 6989 , 8873 , 3876 , 15409 ] pie = Pie( '饼图' ) pie.add( '芝麻饼' , fruits, shop1_sales, is_label_show = True ) pie.show_config() pie.render() |

玫瑰花样式饼图
1 2 3 4 5 |
pie2 = Pie( "饼图-玫瑰图示例" , title_pos = 'center' , width = 900 ) pie2.add( "商家A" , fruits, shop1_sales, center = [ 25 , 50 ], is_random = True , radius = [ 25 , 60 ], rosetype = 'radius' ) pie2.add( "商家B" , fruits, shop2_sales, center = [ 75 , 50 ], is_random = True , radius = [ 25 , 60 ], rosetype = 'area' , is_legend_show = False , is_label_show = True ) pie2.show_config() pie2.render() |

5、散点图
散点图又称散点分布图,是以一个变量为横坐标,另一变量为纵坐标,利用散点(坐标点)的分布形态反映变量统计关系的一种图形。特点是能直观表现出影响因素和预测对象之间的总体关系趋势。
静态散点图
1 2 3 4 5 6 |
from pyecharts import Scatter scatter = Scatter( "散点图示例" ) scatter.add( "A" , shop1_sales, shop2_sales) scatter.add( "B" , shop1_sales[:: - 1 ], shop2_sales) scatter.show_config() scatter.render() |

动态散点图
1 2 3 4 5 6 7 8 9 10 11 |
from pyecharts import EffectScatter v1 = [ 5 , 20 , 36 , 10 , 10 , 100 ] v2 = [ 55 , 60 , 16 , 20 , 15 , 80 ] # 动态散点图 es = EffectScatter( "动态散点图" ) # v1 x坐标 v2 y坐标 es.add( '苹果' , v1, v2) es.show_config() es.render() |

各种图形动态散点图
1 2 3 4 5 6 7 8 9 10 |
from pyecharts import EffectScatter es = EffectScatter( "动态散点图各种图形" ) es.add(" ", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol=" pin") es.add(" ", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4,symbol=" rect") es.add(" ", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5,symbol=" roundRect") es.add(" ", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill',symbol=" diamond") es.add(" ", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3,symbol=" arrow") es.add(" ", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3,symbol=" triangle") es.show_config() es.render() |

以上是使用pyecharts实现柱状图、折线图、散点图和饼图的统计图表。