1. 前言
数据可视化在当今大数据时代已经变成了重要的任务之一。而BI大屏则是一种重要的数据可视化方式之一。在BI大屏应用中,Pyecharts是一种比较流行的数据可视化Python库。我们可以使用Pyecharts轻松实现超好看的BI大屏。本文主要介绍如何在Pyecharts中实现超好看的BI大屏。
2. 准备工作
2.1 安装Pyecharts
在使用Pyecharts之前,需要先安装Pyecharts库。可以使用以下命令安装最新版本的Pyecharts:
!pip install pyecharts==1.9.0
如果需要绘制地图等一些特殊图表,需要安装额外的依赖包。可以使用以下命令安装所有依赖包:
!pip install pyecharts-snapshot
!pip install echarts-countries-pypkg
!pip install echarts-themes-pypkg
!pip install echarts-china-provinces-pypkg
!pip install echarts-china-cities-pypkg
!pip install echarts-china-counties-pypkg
2.2 准备数据
在这个教程中,我们将使用一个简单的数据集,该数据集包括Pizza店每个月的销售额。
import pandas as pd
data=pd.read_csv('pizza_data.csv')
data.head()
输出结果如下:
Month Sales
0 2016-01-01 10000
1 2016-02-01 12000
2 2016-03-01 13000
3 2016-04-01 15000
4 2016-05-01 17000
如上所示,数据集包括日期和销售额两个列。
3. 绘制超好看的BI大屏
现在,我们已经准备好用Pyecharts绘制超好看的BI大屏了!
3.1 配置主题
首先,我们需要配置一个主题,以便图表有一个美观的外观。此外,为了确保颜色的一致性,最好为图表定义一组自定义颜色。
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOK
from pyecharts import options as opts
from pyecharts.charts import Page
from pyecharts.faker import Faker
# 配置主题
from pyecharts.globals import ThemeType
custom_theme = ThemeType.ROMANTIC
# 自定义颜色,用的是十六进制颜色代码
colors = ['#e91e63', '#9c27b0', '#673ab7', '#3f51b5', '#2196f3', '#03a9f4', '#00bcd4', '#009688', '#4caf50', '#8bc34a', '#cddc39', '#ffeb3b', '#ffc107', '#ff9800', '#ff5722', '#795548']
3.2 绘制柱状图
首先,我们将使用柱状图来显示每个月的销售额。可以使用add_xaxis()方法指定x轴的标签,使用add_yaxis()方法指定y轴的值。
from pyecharts.charts import Bar
# 创建图表
bar = Bar(init_opts=opts.InitOpts(theme=custom_theme))
# 添加数据
bar.add_xaxis(data['Month'].tolist())
bar.add_yaxis('', data['Sales'].tolist(), label_opts=opts.LabelOpts(is_show=False))
# 设置全局配置项
bar.set_global_opts(
# 标题
title_opts=opts.TitleOpts(title="Pizza Sales"),
# 图例
legend_opts=opts.LegendOpts(is_show=False),
# 工具箱
toolbox_opts=opts.ToolboxOpts(),
# x轴
xaxis_opts=opts.AxisOpts(
name='',
name_location='middle',
name_gap=30,
splitline_opts=opts.SplitLineOpts(is_show=False),
axistick_opts=opts.AxisTickOpts(is_show=True),
axisline_opts=opts.AxisLineOpts(
is_show=True,
linestyle_opts=opts.LineStyleOpts(type_='solid', color='#8c8c8c', width=1)
),
axislabel_opts=opts.LabelOpts(
color='#8c8c8c',
font_size=12,
interval=0,
formatter='{value}',
# rotate=-15, # 旋转刻度标签的角度
)
),
# y轴
yaxis_opts=opts.AxisOpts(
name='Sales ($)',
splitline_opts=opts.SplitLineOpts(is_show=True, linestyle_opts=opts.LineStyleOpts(type_='dashed')),
axistick_opts=opts.AxisTickOpts(is_show=True),
axisline_opts=opts.AxisLineOpts(
is_show=True,
linestyle_opts=opts.LineStyleOpts(type_='solid', color='#8c8c8c', width=1)
),
axislabel_opts=opts.LabelOpts(
color='#8c8c8c',
font_size=12,
formatter='{value}',
)
),
# 图片大小
graphic_opts=[opts.GraphicGroup(
graphic_item=opts.GraphicItem(
left=0,
top=0,
z=100,
bounding='raw',
children=[
opts.GraphicRect(
graphic_item=opts.GraphicItem(left='center', top='center'),
graphic_shape_opts=opts.GraphicShapeOpts(
width=800,
height=600
),
graphic_basicstyle_opts=opts.GraphicBasicStyleOpts(
fill='#eee',
stroke='#eee'
)
)
]
)
)]
)
# 设置序列配置项
bar.set_series_opts(
label_opts=opts.LabelOpts(
color='white',
font_size=12,
position='insideTop',
formatter=opts.Func('{a}\n{c}')
),
itemstyle_opts=opts.ItemStyleOpts(
color=colors[0]
)
)
# 显示图表
bar.render_notebook()
输出结果如下:
3.3 绘制时间线
接下来,我们将为BI大屏添加一个交互式时间线。可以使用echarts.graphic中的组件来实现这一功能。
from pyecharts.commons.utils import JsCode
from pyecharts.components import DatePicker
from pyecharts.options import ComponentTitleOpts
# 创建日期选择器
datepicker = DatePicker(
width=120,
height=30,
pos_bottom='10%',
pos_left='center',
font_size=16,
range_=[data['Month'].tolist()[0], data['Month'].tolist()[-1]],
out_of_range=None,
on_change=JsCode("""
function onchange(selDate){
console.log(selDate);
window.postMessage(selDate);
}
"""),
)
# 配置页面标题
page_title = 'Pizza Sales'
# 创建页面容器
page = Page(page_title, layout=Page.SimplePageLayout, background_color='#fff')
page.add_date_picker(datepicker)
# 显示图表
page.add(bar)
page.render_notebook()
输出结果如下:
3.4 绘制饼图和地图
可以使用Pyecharts轻松添加饼图和地图到BI大屏中。下面是代码示例:
from pyecharts.charts import Pie
from pyecharts.charts import Map
# 创建饼图
pie = (
Pie(init_opts=opts.InitOpts(theme=custom_theme))
.add(
series_name="",
data_pair=[
[str(i), round(sum(data['Sales'].tolist())/12.0)] for i in Faker.clock
],
radius=['10%', '60%'],
center=['80%', '25%'],
label_opts=opts.LabelOpts(is_show=True, position='inner', formatter='{b}: {c}')
)
.set_global_opts(
# 图例
legend_opts=opts.LegendOpts(is_show=False),
# 饼图标题
title_opts=opts.TitleOpts(
title="Average Monthly Sales",
pos_left='center',
pos_top='60%',
title_textstyle_opts=opts.TextStyleOpts(
font_size=24,
color='#8c8c8c'
)
),
)
)
# 创建地图
map_chart = (
Map(init_opts=opts.InitOpts(theme=custom_theme))
.add(
series_name="",
data_pair=[
(str(i), round(sum(data['Sales'].tolist())/12.0)) for i in Faker.provinces
],
maptype='china',
is_map_symbol_show=False,
label_opts=opts.LabelOpts(is_show=True),
itemstyle_opts=opts.ItemStyleOpts(
color="#f5f5f5",
border_color="#999",
border_width=0.5)
)
.set_series_opts(
label_opts=opts.LabelOpts(is_show=True, color='#8c8c8c', font_size=12, formatter="{b} : {c}")
)
.set_global_opts(
# 标题
title_opts=opts.TitleOpts(
title="Average Monthly Sales",
pos_left='center',
pos_top='60%',
title_textstyle_opts=opts.TextStyleOpts(
font_size=24,
color='#8c8c8c'
)
),
# 鼠标悬停样式
tooltip_opts=opts.TooltipOpts(
is_show=True,
formatter=JsCode("""
function(params) {
return params.name + ' : ' + params.data.value[1];
}
""")
),
# 色卡
visualmap_opts=opts.VisualMapOpts(
is_calculable=True,
dimension=0,
pos_left='10',
pos_top='10%',
range_text=['High', 'Low'],
range_color=['#e6f2ff', '#99b3cc', '#4d759e'],
),
)
)
# 添加至页面容器中
page.add(pie)
page.add(map_chart)
# 显示图表
page.render_notebook()
输出结果如下:
4. 结论
使用Pyecharts可以轻松实现超好看的BI大屏。在本教程中,我们介绍了如何使用Pyecharts绘制柱状图、时间线、饼图和地图。通过在自己的数据中实现这些可视化,您可以创建引人注目的数据故事,并帮助他人更好地了解数据。