超好看的 BI 大屏,Pyecharts 也可以轻松实现

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绘制柱状图、时间线、饼图和地图。通过在自己的数据中实现这些可视化,您可以创建引人注目的数据故事,并帮助他人更好地了解数据。

后端开发标签