小红:你先跟我说说什么是pyecharts吧。
小明:Echarts 是一个由百度开源的数据可视化javascript库,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts诞生了。简单地说,pyecharts就是百度开源的一个强大的javascript数据可视化库Echarts的python接口。
小红:明白,那这个pyecharts要怎么安装呢?
小明:很简单,用pip就可以安装了。下面是在jupyter notebook中安装这个库的一个示范。
# 安装pyecharts
!pip install pyecharts==0.5.11
# pyecharts_snapshot 提供图片导出功能
!pip install pyecharts_snapshot
一,基本图表
小红:好了,我已经安装成功了。你可不可以给我举一些常用图表的范例。
小明:OK,在数据分析中最常用的3种图表就是柱形图,折线图和散点图了。下面我们就来看一下pyecharts绘制这3种常用图表的范例吧。
1,柱形图
柱形图适合表现几组数据之间的对比关系,柱形图表现的数据的数量一般不宜太多,多了的话会像一堆杂草。
from pyecharts import Bar
x = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋"]
y1 = [5, 20, 36, 10, 75]
y2 = [10, 25, 8, 60, 20]
bar = Bar(title = "产品月销量",width = 600,height = 420)
bar.add(name = "商家A", x_axis = x, y_axis = y1)
bar.add(name = "商家B", x_axis = x, y_axis = y2,is_xaxis_boundarygap =True)
# 导出绘图html文件,可直接用浏览器打开
bar.render('柱形图示范.html')
bar
2,折线图
折线图适合描述两个变量之间的函数关系,例如常用它来描述一个变量随时间的变化趋势。
from pyecharts import Line
x = ['2018-{:0>2d}'.format(s) for s in range(1,13)]
y1 = [5,10,26,30,35,30,20,26,40,46,40,50]
y2 = [8,20,24,36,40,36,40,45,50,53,48,58]
line = Line(title = "月销售总额",width = 600,height = 420)
line.add(name = "商家A", x_axis = x, y_axis = y1,
line_width = 3,line_color = 'red')
line.add(name = "商家B", x_axis = x, y_axis = y2,
yaxis_min = 0,yaxis_max = 100,is_xaxis_boundarygap = False,
is_datazoom_show =True,line_width = 2,line_color = 'cyan')
line.render('折线图示范.html')
line
3,散点图
散点图适合表现大量样本的多个属性的分布规律。散点图的每个点表示一个样本,每个坐标维度表示一个属性。
from pyecharts import Scatter
import pandas as pd
dfboy = pd.DataFrame()
dfboy['weight'] = [56,67,65,70,57,60,80,85,76,64]
dfboy['height'] = [162,170,168,172,168,172,180,176,178,170]
dfgirl = pd.DataFrame()
dfgirl['weight'] = [50,62,60,70,57,45,62,65,70,56]
dfgirl['height'] = [155,162,165,170,166,158,160,170,172,165]
scatter = Scatter(title = "体格数据",width = 600,height = 420)
scatter.add(name = "boy", x_axis = dfboy['weight'], y_axis = dfboy['height'])
scatter.add(name = "girl", x_axis = dfgirl['weight'], y_axis = dfgirl['height'],
yaxis_min = 130,yaxis_max = 200,xaxis_min = 30,xaxis_max = 100)
scatter.render("散点图示范.html")
scatter
当样本属性维度多于2个时,散点图可以使用点的颜色或大小等方式来表达更多属性维度。下面示范使用点的大小表示第3个维度。
from pyecharts import Scatter
import pandas as pd
def custom_formatter(params):
return (params.value[3] + ':' +
str(params.value[0]) +','
+str(params.value[1]) + ','
+str(params.value[2]))
df = pd.DataFrame()
df['country'] = ["中国",'美国','德国','法国','英国','日本','俄罗斯','印度','澳大利亚','加拿大']
df['life-expectancy'] = [76.9,79.1,81.1,81.9,81.4,83.5,73.13,66.8,81.8,81.7]
df['capita-gdp'] = [13334,53354,44053,37599,38225,36162,23038,5903,44056,43294]
df['population'] = [1376048943,321773631,80688545,64395345,64715810,126573481,143456918,
1311050527,23968973,35939927]
scatter = Scatter(title = "各国发展水平",width = 600,height = 420)
scatter.add(name = '',
x_axis = df['capita-gdp'], # params.values[0]
y_axis = df['life-expectancy'], # params.values[1]
extra_data = df['population'].values.tolist(), # params.values[2]
extra_name = df['country'].values.tolist(), # params.values[3]
tooltip_formatter=custom_formatter, #自定义提示框格式内容
is_visualmap=True,
visual_orient="horizontal",
visual_type = 'size', #可以是size或者color
visual_dimension=2,
visual_range=[20000000, 1500000000],
)
scatter
小红:你上面说的这些范例大部分还是挺简单的,可能这个用散点图来显示各个国家的发展水平的例子相对复杂一些,是不是如果有第3维数据就要用extra_data来传入呢?然后用visual_dimension来指定用点的颜色或者点的大小表示的是第几维的数据。这里的话,用点的大小表示了population也就是各个国家人口的多少。对吗?
小明:一点也没有错,你可以仿照着这个例子试试用点的颜色来表示第3维度的数据,应该不难懂的。
小红:棒棒的。除了这三种最常用图表外。还有一些别的好用的表现力强的图表可以推荐一些吗?
小明:你还真是学而不厌。那我再给你演示一下箱型图,词云图以及地理坐标系图吧。
4,箱型图
箱型图适合表现一组数据的统计分布规律,它能显示出一组数据的最大值、最小值、中位数、及上下四分位数。
箱型图的进阶版本是小提琴图,可以展示数据的密度估计曲线,可以用seaborn画出。
from pyecharts import Boxplot
x =['1班','2班','3班','4班']
y1=[78, 98, 56, 78, 90.0, 45, 78, 20, 87, 86, 74, 89, 94]
y2=[89, 82, 45, 67, 68, 78.0, 79, 98, 71, 56, 78, 81, 80]
y3=[90, 80, 60, 89, 76, 73.0, 72, 92, 89, 87, 65, 66, 76]
y4=[82, 72, 55, 100, 90.0, 78, 69, 67, 87, 66, 78, 71, 82]