一文学会炫酷图表利器pyecharts!

说到数据分析,肯定离不开数据的可视化,毕竟图表比冷冰冰的数字更加直观,老板们只想一眼就能看出趋势和结论。

https://pyecharts.org/#/zh-cn/quickstart

今天我们就聊一聊 pyecharts 中几种常用的图表。


pyecharts的安装

pip install pyecharts

有兴趣的小伙伴们也可以看看我之前的可视化案例

古天乐的吕布有多猛?Python爬虫可视化告诉你!

Python实战|腾讯招聘你干什么?python可视化告诉你

Python实战| 9383字手把手教你使用多线程爬取瓜子二手车并且可视化展示!

爬虫+数据可视化选大学,小学妹直呼牛X


导入模块

使用到的相关库如下:

frompyecharts.chartsimportBar

frompyecharts.chartsimportPie

frompyecharts.chartsimportLine

frompyechartsimportoptionsasopts

frompyecharts.chartsimportEffectScatter

frompyecharts.globalsimportSymbolType

frompyecharts.chartsimportGrid

frompyecharts.chartsimportWordCloud

frompyecharts.chartsimportMap

数据这里我们以之前瓜子二手车和高校排行数据为例,有兴趣的小伙伴可以参考:

python实战| 二手车难买?手把手带你爬取瓜子二手车-二级页面

爬虫+数据可视化选大学,小学妹直呼牛X

我们先使用pandas导入数据,关于pandas的技巧大家可以参考:

让人无法拒绝的pandas技巧,简单却好用到爆!

柱状图

数据准备

pd_data = pd.read_excel('瓜子二手车.xlsx')

pd.set_option('display.max_columns',None)# 显示完整的列

pd.set_option('display.max_rows',None)# 显示完整的行

pd.set_option('display.expand_frame_repr',False)# 设置不折叠数据

print(pd_data.head())

# 统计 过户分类 以及对应次数

trans_count = pd_data['过户情况'].value_counts()

# 针对于过户情况的分类

x_data = trans_count.index.tolist()

# 分类后各组数据的统计

y_data = trans_count.tolist()

print(x_data)

print(y_data)

'''

['1次过户', '0次过户', '3次过户']

[10, 8, 1]

'''

绘图

# 柱状图

bar = Bar()

bar.add_xaxis(x_data)

bar.add_yaxis("过户次数", y_data)

bar.set_global_opts(title_opts=opts.TitleOpts(title="Bar - 二手车过户展示图"))

bar.render('二手车过户展示图.shtml')


当然有时候还可以在一个柱状图中添加多个 y 轴记录,实现多个柱状对比,只需调用多一次 add_yaxis 即可。

当然pyecharts还支持链式调用,实现的功能一致,代码如下:

# 柱状图

z_data = [22,12,18]

bar = (

Bar()

.add_xaxis(x_data)

.add_yaxis("20年过户次数", y_data)

.add_yaxis("21年过户次数", z_data)

.set_global_opts(title_opts=opts.TitleOpts(title="Bar - 二手车过户对比展示图"))

)

bar.render('二手车对比过户展示图.shtml')

有时候,柱状图太高不方便看,我们还可以将 x 轴和 y 轴互换,生成横向的柱状图。多柱状图和 xy 轴互换不冲突,可叠加使用。

# 柱状图

z_data = [22,12,18]

bar = (

Bar()

.add_xaxis(x_data)

.add_yaxis("20年过户次数", y_data)

.add_yaxis("21年过户次数", z_data)

.reversal_axis()

.set_global_opts(title_opts=opts.TitleOpts(title="Bar - 二手车过户横向对比展示图"))

)

bar.render('二手车横向对比过户展示图.shtml')

饼状图

饼状图也是使用频率很高的图表之一,尤其是适用于百分比类的图,可以很直观的看出来各个类别所占据总体份额的比例。

数据准备

pd_data = pd.read_excel('全国高校数据.xlsx')

pd.set_option('display.max_columns',None)# 显示完整的列

pd.set_option('display.max_rows',None)# 显示完整的行

pd.set_option('display.expand_frame_repr',False)# 设置不折叠数据

type_name = pd_data['type_name'].value_counts()

type_name1 = type_name.index.tolist()# 大学类型分布图

type_name2 = type_name.tolist()# 大学类型数量

绘图

# 绘制饼图

c = (

Pie()

.add("", [list(z)forzinzip(type_name1, type_name2)])

.set_global_opts(title_opts=opts.TitleOpts(title="大学类型分布图"))

.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))

.render("大学类型.shtml")

)

环形饼图

c = (

Pie()

.add(

"",

[list(z)forzinzip(type_name1, type_name2)],

radius=["40%","55%"],

label_opts=opts.LabelOpts(

position="outside",

formatter="{a|{a}}{abg|}\n{hr|}\n {b|{b}: }{c}  {per|{d}%}  ",

background_color="#eee",

border_color="#aaa",

border_width=1,

border_radius=4,

rich={

"a": {"color":"#999","lineHeight":22,"align":"center"},

"abg": {

"backgroundColor":"#e3e3e3",

"width":"100%",

"align":"right",

"height":22,

"borderRadius": [4,4,0,0],

},

"hr": {

"borderColor":"#aaa",

"width":"100%",

"borderWidth":0.5,

"height":0,

},

"b": {"fontSize":16,"lineHeight":33},

"per": {

"color":"#eee",

"backgroundColor":"#334455",

"padding": [2,4],

"borderRadius":2,

},

},

),

)

.set_global_opts(title_opts=opts.TitleOpts(title="高校类型对比饼图"))

.render("高校类型对比饼图.shtml")

)

饼图2

data_pair = [list(z)forzinzip(type_name1, type_name2)]

data_pair.sort(key=lambdax: x[1])

(

Pie(init_opts=opts.InitOpts(width="1600px", height="800px", bg_color="#2c343c"))

.add(

series_name="访问来源",

data_pair=data_pair,

rosetype="radius",

radius="55%",

center=["50%","50%"],

label_opts=opts.LabelOpts(is_show=False, position="center"),

)

.set_global_opts(

title_opts=opts.TitleOpts(

title="高校饼图",

pos_left="center",

pos_top="20",

title_textstyle_opts=opts.TextStyleOpts(color="#fff"),

),

legend_opts=opts.LegendOpts(is_show=False),

)

.set_series_opts(

tooltip_opts=opts.TooltipOpts(

trigger="item", formatter="{a} 
{b}: {c} ({d}%)"

),

label_opts=opts.LabelOpts(color="rgba(255, 255, 255, 0.3)"),

)

.render("高校饼图.html")

)

折线图

折线图通常是来展示数据在不同时间段的走势,例如比较经典的股市 K 线图就是折线图的一种。

pd_data = pd.read_excel('全国高校数据.xlsx')

type_name = pd_data['type_name'].value_counts()

type_name1 = type_name.index.tolist()# 理工 vs 综合

type_name2 = type_name.tolist()# 理工 vs 综合对应数量

print(type_name1)

print(type_name2)

绘图

# 折线图

line = (

Line()

.add_xaxis(type_name1)

.add_yaxis('china', type_name2)

.set_global_opts(title_opts=opts.TitleOpts(title="高校人气值"))

)

line.render('高校人气值.shtml')

同样,和柱状图类似,折线图也可以在一个图中添加多个 y 轴记录。

line = (

Line()

.add_xaxis(type_name1)

.add_yaxis('2020', type_name2)

.add_yaxis('2021', z_data)

.set_global_opts(title_opts=opts.TitleOpts(title="双折线图"))

)

line.render('高校人气值双折线图.shtml')

当然了还有阶梯折线图,同样可以实现

line = (

Line()

.add_xaxis(type_name1)

.add_yaxis('2020', type_name2, is_step=True)

.add_yaxis('2021', z_data, is_step=True)

.set_global_opts(title_opts=opts.TitleOpts(title="阶梯折线图"))

)

line.render('高校人气值阶梯图.shtml')

地图

有时我们会希望将数据展示在地图上,比如全国疫情状况,全国各省份人口数据,微信好友各省份分布等。

数据准备

pd_data = pd.read_excel('全国高校数据.xlsx')

school_num = pd_data.province_name.value_counts().sort_values()

school_num1 = school_num.index.tolist()

school_num2 = school_num.values.tolist()

print(school_num1)

print(school_num2)

绘图

map = (

Map()

.add("", [list(z)forzinzip(school_num1, school_num2)],"china")

.set_global_opts(

title_opts=opts.TitleOpts(title="中国地图示例"),

visualmap_opts=opts.VisualMapOpts(max_=5, is_piecewise=True),

)

)

map.render('全国高校分布图.shtml')

漏斗图

数据准备

pd_data = pd.read_excel('./全国高校数据.xlsx')

# 去除 ’w‘

pd_data.loc[:,'view_total1'] = pd_data['view_total'].str.replace('w','').astype('float64')

# 划分价格区间

pd_data['view_total区间'] = pd.cut(pd_data['view_total1'], [0,500,1000,1500,2000,2500,3000,3500],

labels=['0-500','500-1000','1000-1500','1500-2000','2000-2500','2500-3000',

'>3000'])

# 统计数量

popular = pd_data['view_total区间'].value_counts()

popular1 = popular.index.tolist()# 人气值分类

popular2 = popular.tolist()# 人气值分类对应数量'''

print(popular1)

print(popular2)

绘图

c = (

Funnel()

.add(

"高校",

[list(z)forzinzip(popular1, popular2)],

label_opts=opts.LabelOpts(position="inside"),

)

.set_global_opts(title_opts=opts.TitleOpts(title="人气值漏斗图"))

.render("人气值漏斗图.shtml")

)

仪表盘

c = (

Gauge()

.add(

"及格指标",

[("及格率",75.5)],

axisline_opts=opts.AxisLineOpts(

linestyle_opts=opts.LineStyleOpts(

color=[(0.3,"#67e0e3"), (0.7,"#37a2da"), (1,"#fd666d")], width=30

)

),

)

.set_global_opts(

title_opts=opts.TitleOpts(title="期末成绩及格率"),

legend_opts=opts.LegendOpts(is_show=False),

)

.render("成绩及格率.html")

)

水滴图

c = (

Liquid()

.add("lq", [0.45], is_outline_show=False)

.set_global_opts(title_opts=opts.TitleOpts(title="完成率"))

.render("liquid_without_outline.html")

)

你可能感兴趣的:(一文学会炫酷图表利器pyecharts!)