基于Pyecharts可视化大屏案例一(3)

上两篇文章《基于Pyecharts可视化大屏案例一(1)》《基于Pyecharts可视化大屏案例一(2)》已经为大家详细展示了大屏大致的制作过程以及可视化大屏的布局,接下来继续完善。我们先来回顾下完整的精美大屏:

请看下本文在上两文基础上制作左上图形的最终效果:

放大展示(注意放大后需要F5刷新一下):

接下来,就开始漫长的......

1.  加载一箩筐的库

from pyecharts.charts import Page,Bar,Line,Grid,Pieimport pyecharts.options as optsfrom pyecharts.globals import ThemeTypefrom pyecharts.faker import Fakerfrom pyecharts.commons.utils import JsCodeimport pandas as pdimport numpy as npimport randomfrom bs4 import BeautifulSoup

2.  生成随机数据

names = ['店员_'+str(i) for i in range(1,51)] #生成n个店员的名字sales = [random.randint(10,100) for _ in range(50)] #随机生成n个数字,代表店员销售额df = pd.DataFrame() #生成一个空DataFrame()df['店员'] = names df['销售额'] = salesdf.sort_values(by='销售额',ascending=False,inplace=True) #按销售额从小到大排序data_pair = [] #生成画图需要的数据格式for i,j in zip(df['店员'],df['销售额']):    list_ = [i,j]    data_pair.append(list_)

3.  不加任何参数绘制饼图

# 画图pie = ( Pie() .add( series_name='店员销售额', data_pair=data_pair, )).render('test.html')

4.  去掉legend和设置标题

# 画图pie = (    Pie()    .add(        series_name='店员销售额',        data_pair=data_pair,    )    .set_global_opts(        title_opts=opts.TitleOpts(            title='导购员成交销售额',            pos_left='center',            pos_top='0%',            title_textstyle_opts=opts.TextStyleOpts(color='pink',font_size = 20,),        ),        legend_opts=opts.LegendOpts(            is_show = False,        ),    )).render('test.html')

5.  设置饼图类型为南丁格尔玫瑰图、圆心位置,以及空心的大小

# 画图pie = ( Pie() .add( series_name='店员销售额', data_pair=data_pair, rosetype='radius', #类型为南丁格尔玫瑰图 radius=['10%','60%'], center=['center', 'center'], #设置圆心位置 ) .set_global_opts( title_opts=opts.TitleOpts( title='导购员成交销售额', pos_left='center', pos_top='0%', title_textstyle_opts=opts.TextStyleOpts(color='pink',font_size = 20,), ), legend_opts=opts.LegendOpts( is_show = False, ), )).render('test.html')

6.  设置标签,加上百分比

# 画图pie = (    Pie()    .add(        series_name='店员销售额',        data_pair=data_pair,        rosetype='radius', #类型为南丁格尔玫瑰图        radius=['10%','60%'],        center=['center', 'center'], #设置圆心位置    )    .set_global_opts(        title_opts=opts.TitleOpts(            title='导购员成交销售额',            pos_left='center',            pos_top='0%',            title_textstyle_opts=opts.TextStyleOpts(color='pink',font_size = 20,),        ),        legend_opts=opts.LegendOpts(            is_show = False,        ),    )    .set_series_opts(        label_opts=opts.LabelOpts(formatter='{b}: {c}万'),        tooltip_opts=opts.TooltipOpts(            trigger='item', formatter='{a} <br/>{b}: {c}万 ({d}%)'        ),    )).render('test.html')

7.  通过grid()设置背景

# 画图pie = ( Pie() .add( series_name='店员销售额', data_pair=data_pair, rosetype='radius', #类型为南丁格尔玫瑰图 radius=['10%','60%'], center=['center', 'center'], #设置圆心位置 ) .set_global_opts( title_opts=opts.TitleOpts( title='导购员成交销售额', pos_left='center', pos_top='0%', title_textstyle_opts=opts.TextStyleOpts(color='pink',font_size = 20,), ), legend_opts=opts.LegendOpts( is_show = False, ), ) .set_series_opts( label_opts=opts.LabelOpts(formatter='{b}: {c}万'), tooltip_opts=opts.TooltipOpts( trigger='item', formatter='{a} <br/>{b}: {c}万 ({d}%)' ), ))
grid = ( Grid( init_opts=opts.InitOpts( theme = ThemeType.WONDERLAND #设置主题 ) ) .add(pie, grid_opts=opts.GridOpts(pos_left='0%',)) #调整位置).render('test.html')

8.  添加到大屏上

def get_grid_3():    names = ['店员_'+str(i) for i in range(1,101)] #生成100个店员的名字    sales = [random.randint(10,100) for _ in range(100)] #随机生成100个数字,代表店员销售额    df = pd.DataFrame() #生成一个空DataFrame()    df['店员'] = names     df['销售额'] = sales    df.sort_values(by='销售额',ascending=False,inplace=True) #按销售额从小到大排序    data_pair = [] #生成画图需要的数据格式    for i,j in zip(df['店员'],df['销售额']):        list_ = [i,j]        data_pair.append(list_)        # 画图    pie = (        Pie()        .add(            series_name='店员销售额',            data_pair=data_pair,            rosetype='radius', #类型为南丁格尔玫瑰图            radius=['10%','60%'],            center=['center', 'center'], #设置圆心位置        )        .set_global_opts(            title_opts=opts.TitleOpts(                title='导购员成交销售额',                pos_left='center',                pos_top='0%',                title_textstyle_opts=opts.TextStyleOpts(color='pink',font_size = 20,),            ),            legend_opts=opts.LegendOpts(                is_show = False,            ),        )        .set_series_opts(            label_opts=opts.LabelOpts(formatter='{b}: {c}万'),            tooltip_opts=opts.TooltipOpts(                trigger='item', formatter='{a} <br/>{b}: {c}万 ({d}%)'            ),        )    )        grid = (        Grid(            init_opts=opts.InitOpts(                theme =  ThemeType.WONDERLAND #设置主题            )        )        .add(pie, grid_opts=opts.GridOpts(pos_left='0%',)) #调整位置    )        return griddef get_page():    grid3 = get_grid_3()        page = (        Page()        .add(grid3)    )    return pageif __name__ == '__main__':    page = get_page()    page.render('test.html')        with open('test.html', 'r+', encoding='utf-8') as html:            html_bf = BeautifulSoup(html, 'lxml')        divs = html_bf.select('.chart-container')        divs[0]['style'] = 'width:550px;height:400px;position:absolute;top:540px;left:30px;border-style:solid;border-color:#444444;border-width:0px;'                body = html_bf.find('body')        body['style'] = 'background-color:#07645D;' #设置网页背景颜色        div_title='<div align=\'center\' style=\'width:1824px;\'>\n<span style=\'font-size:64px;font face=\'黑体\';color:#66FFFF\'><b>2020年销售数据分析</b></div>'    #修改页面背景色、追加标题        body.insert(0,BeautifulSoup(div_title,'lxml').div)        html_new = str(html_bf)        html.seek(0, 0)        html.truncate()        html.write(html_new)        html.close()

9.  最后附上含三张图片的可视化大屏代码

def get_grid_1(): year = list(range(2004,2021)) #年份 random_data_1 = [random.randint(1000,10000) for _ in range(17) ] #生成17个随机整数 random_data_2 = [random.randint(100,1000) for _ in range(17) ] #生成17个随机整数 r1 = [round((random_data_1[i]-random_data_1[i-1])/random_data_1[i],2) for i in range(len(random_data_1))[1:]] #计算增长率,并取2位小数点 r2 = [round((random_data_2[i]-random_data_2[i-1])/random_data_2[i],2) for i in range(len(random_data_2))[1:]] #计算增长率,并取2位小数点 # 柱图 bar = ( Bar() .add_xaxis(year) .add_yaxis('销售额',random_data_1,yaxis_index=0,gap='10%') .add_yaxis('订单量',random_data_2,yaxis_index=1,gap='10%') .extend_axis( #添加一个描绘订单量的坐标轴 yaxis=opts.AxisOpts( name = '订单量\n(万件)', position = 'right', #设置坐标轴在画布右侧 min_ = 0, #设置y刻度的最小值 max_ = 1300, #设置y刻度的最小值 offset = 60, #设置Y轴偏移 axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color='#FFB8B8') ), ) ) .extend_axis( #添加一个描绘增长率的坐标轴 yaxis=opts.AxisOpts( name = '增长率', position='left', #设置坐标轴在画布左侧 min_ = -5, #设置y刻度的最小值 max_ = 5,#设置y刻度的最大值 axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color='#CCCC00') ),
) ) .set_global_opts( yaxis_opts=opts.AxisOpts( name = '销售额\n(万元)', position='right', #设置描绘销售额的坐标轴在画布右侧 axisline_opts=opts.AxisLineOpts( linestyle_opts=opts.LineStyleOpts(color='#EEAEEE') ), ), title_opts=opts.TitleOpts( title='历年订货额/订单量增长情况', pos_left = 'center', pos_top = '0px', # 设置主标题字体、颜色、大小等 title_textstyle_opts = opts.TextStyleOpts( #文字颜色 color='#66FFB3', #文字风格,可选:normal(正常)、italic(斜体)、oblique(斜体) font_style='normal', #主标题文字字体的粗细,可选:'normal','bold','bolder','lighter' font_weight='bold', #文字的字体系列,还可以是 'serif' , 'monospace', 'Arial', 'Courier New', 'Microsoft YaHei', ... font_family='Arial', # 文字的字体大小 font_size = 25, ) ), legend_opts=opts.LegendOpts( #将标签设置在左边居中,并纵向排列 is_show=True, pos_left='left', orient='vertical', pos_top = 'center', textstyle_opts = opts.TextStyleOpts( font_size = 10, # 标签字体大小 ) ), tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'), #设置提示框 datazoom_opts=opts.DataZoomOpts( range_start = 70, range_end = 100, ), ) )
#线图 line = ( Line() .add_xaxis(['2005','2006','2007','2008','2009','2010','2011','2012','2013','2014','2015','2016','2017','2018','2019','2020']) .add_yaxis('销增长率',r1,yaxis_index=2,itemstyle_opts=opts.ItemStyleOpts(color='green')) .add_yaxis('订增长率',r2,yaxis_index=2,itemstyle_opts=opts.ItemStyleOpts(color='#FF4D4D')) )

# 合并两个图 overlap_ = bar.overlap(line) grid = ( Grid( init_opts=opts.InitOpts( width = '1500px', # 设置画布宽 height = '800px', #设置画布高 # bg_color = '#004B66', # 背景颜色设置 theme = ThemeType.WONDERLAND #设置主题 ) ) .add(overlap_, opts.GridOpts( pos_left='10%', #调整左边轴线与画布的距离 pos_right='13%' #调整右边边轴线与画布的距离 ), is_control_axis_index=True, ) ) return grid

def get_grid_2(): names = ['门店_'+str(i) for i in range(1,31)] #生成30个门店的名字 sales = [random.randint(1000,10000) for _ in range(30)] #随机生成30个数字,代表门店销售额 df = pd.DataFrame() #生成一个空DataFrame() df['店名'] = names df['销售额'] = sales df.sort_values(by='销售额',ascending=True,inplace=True) #按销售额从小到大排序 # 修改店名(加上排名显示) new_names = [] for name,i in zip(df['店名'],[i for i in range(30,0,-1)]): new_names.append(name+'(第'+str(i)+'名)') df['店名'] = new_names # 画图 bar = ( Bar() .add_xaxis(df['店名'].tolist()) .add_yaxis('门店销售额(万元)', df['销售额'].tolist()) .reversal_axis() #旋转XY轴 .set_global_opts( xaxis_opts=opts.AxisOpts( max_ = 11000, axislabel_opts = opts.LabelOpts( color = '#BFBFBF' # 设置X轴标签颜色 ), ), yaxis_opts=opts.AxisOpts( axislabel_opts = opts.LabelOpts( font_size = 15, color = '#BFBFBF' # 设置Y轴标签颜色 ), ), legend_opts=opts.LegendOpts( is_show=True, pos_left='center', orient='vertical', textstyle_opts = opts.TextStyleOpts( color = '#FFDA85', # 文字的字体大小 font_size = 20, ) ), tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'), datazoom_opts=opts.DataZoomOpts( type_='inside', #将拖拉框隐藏 orient='vertical', #将拖拉框垂直放置,即按Y轴拖拉 range_start = 60, #拖拉起始位置(百分比) range_end = 100, #拖拉结束位置(百分比) ), ) .set_series_opts( label_opts=opts.LabelOpts(position='right'), #设置标签值的位置 markline_opts=opts.MarkLineOpts( data=[opts.MarkLineItem(x=df['销售额'].mean(), name='均值')], #添加均值线 linestyle_opts=opts.LineStyleOpts(color='#00CC99') ), ) ) # 创建一个grid grid = ( Grid( init_opts=opts.InitOpts( theme = ThemeType.WONDERLAND #设置主题 ) ) .add(bar, grid_opts=opts.GridOpts(pos_left='20%',)) #调整位置,将店名都显示出来 )
return grid
def get_grid_3(): names = ['店员_'+str(i) for i in range(1,101)] #生成100个店员的名字 sales = [random.randint(10,100) for _ in range(100)] #随机生成100个数字,代表店员销售额 df = pd.DataFrame() #生成一个空DataFrame() df['店员'] = names df['销售额'] = sales df.sort_values(by='销售额',ascending=False,inplace=True) #按销售额从小到大排序 data_pair = [] #生成画图需要的数据格式 for i,j in zip(df['店员'],df['销售额']): list_ = [i,j] data_pair.append(list_) # 画图 pie = ( Pie() .add( series_name='店员销售额', data_pair=data_pair, rosetype='radius', #类型为南丁格尔玫瑰图 radius=['10%','60%'], center=['center', 'center'], #设置圆心位置 ) .set_global_opts( title_opts=opts.TitleOpts( title='导购员成交销售额', pos_left='center', pos_top='0%', title_textstyle_opts=opts.TextStyleOpts(color='pink',font_size = 20,), ), legend_opts=opts.LegendOpts( is_show = False, ),
) .set_series_opts( label_opts=opts.LabelOpts(formatter='{b}: {c}万'), tooltip_opts=opts.TooltipOpts( trigger='item', formatter='{a} <br/>{b}: {c}万 ({d}%)' ), ) ) grid = ( Grid( init_opts=opts.InitOpts( theme = ThemeType.WONDERLAND #设置主题 ) ) .add(pie, grid_opts=opts.GridOpts(pos_left='0%',)) #调整位置 ) return grid

def get_page(): grid1 = get_grid_1() grid2 = get_grid_2() grid3 = get_grid_3() page = ( Page() .add(grid1) .add(grid2) .add(grid3) )
return page
if __name__ == '__main__': page = get_page() page.render('my_first_pycharts.html') with open('my_first_pycharts.html', 'r+', encoding='utf-8') as html:
html_bf = BeautifulSoup(html, 'lxml') divs = html_bf.select('.chart-container') divs[0]['style'] = 'width:750px;height:400px;position:absolute;top:120px;left:550px;border-style:solid;border-color:#444444;border-width:0px;' divs[1]['style'] = 'width:550px;height:400px;position:absolute;top:120px;left:30px;border-style:solid;border-color:#444444;border-width:0px;' divs[2]['style'] = 'width:550px;height:400px;position:absolute;top:540px;left:30px;border-style:solid;border-color:#444444;border-width:0px;'
body = html_bf.find('body') body['style'] = 'background-color:#07645D;' #设置网页背景颜色 div_title='<div align=\'center\' style=\'width:1824px;\'>\n<span style=\'font-size:64px;font face=\'黑体\';color:#66FFFF\'><b>2020年销售数据分析</b></div>' #修改页面背景色、追加标题 body.insert(0,BeautifulSoup(div_title,'lxml').div)
html_new = str(html_bf) html.seek(0, 0) html.truncate() html.write(html_new) html.close()
(0)

相关推荐

  • pyecharts基础之柱状图的绘制

    安装 pip install pyecharts 查看版本 pyecharts分为v0.5.X和v1两个大版本,0.5.x 版本将不再进行维护推荐使用v1版本 import pyechartsprin ...

  • bar库 pyecharts

    Pyecharts V1全新版本使用教程--Bar(柱状图的使用) 以下内容均来自Pyecharts官方使用文档(可自行阅读)和自己的理解: 官方链接:https://pyecharts.org/#/ ...

  • 盘点 Django 展示可视化图表的多种方式(建议收藏)

    盘点 Django 展示可视化图表的多种方式(建议收藏)

  • Flask

    Flask 本指南介绍了如何在 Flask 中使用 pyecharts. Flask 模板渲染 Step 0: 新建一个 Flask 项目 $ mkdir pyecharts-flask-demo$ ...

  • Python 图表利器 pyecharts

    来源:Python 技术「ID: pythonall」 随着互联网的高速发展,数据量也在疯狂增长,近几年数据分析,数据挖掘的岗位越来越吃香.说到数据分析,就离不开数据的可视化,毕竟图表比冷冰冰的数字直 ...

  • 如何使用pyecharts中自带的数据集?

    如何使用 pyecharts 中自带的数据集? 我们在学习pyehcarts绘图的过程中,需要一些练习的数据. pyecharts为我们提供了这样的数据集 -- Faker,存储于 faker.py ...

  • (1条消息) Pyecharts组合图表复用渲染模块实现方法

    Pyecharts 组合图表 复用更新数据实现方法记录[一定要看说明文档] 2020-11-04 DraggablePageLayout 布局 page = Page(layout=Page.Drag ...

  • Python Flask 数据可视化

    数据可视化是数据处理中的重要部分,前面我们了解了 Flask 的开发和部署,如何用 Flask 做数据可视化呢?今天我们来了解一下. Python 语言极富表达力,并且拥有众多的数据分析库和框架,是数 ...

  • 基于WebGL的三维数据可视化大屏开发流 ThingJS

    三维数据大屏可视化系统包含多源数据连接.生成二维/三维视图.构建可视化大屏.大屏功能应用等一体化服务,基于多年可视化项目经验,ThingJS平台得出从数据源上传到可视化大屏应用的完整流程,供参考. ( ...

  • 教你快速制作一款高级的可视化大屏

    可视化大屏成了最近两年最火爆的需求,一方面甲方公司都想做炫酷的可视化大屏,来用作公司数据展示,还有些特殊行业如交通.运输.工厂制造,会做更高级的3D建模等. 另一方面市场上有很多厂商都声称能够做大屏, ...

  • 《可视化大屏白皮书1.0》出炉!关于帆软可视化大屏,你想知道的都在这!

    以下为<帆软可视化大屏白皮书1.0>部分内容,全文下载请直接下滑至文末: 一.什么是大屏 大屏,是以大屏幕为载体进行可视化展示的统称.可视化通常被理解为一个制作图表.生成图形图像的简单过程 ...

  • 掌握四点就能做好数据可视化大屏!

    数据的变化,往往能够真实地反映出显著的变化.而在展馆中运用数据可视化大屏展示企业数据,真实.客观地让用户了解到企业的发展变化,让更多用户信任企业,从而提高企业的知名度. 展馆中若是想要做出好的数据可视 ...

  • 9个不为人知的动态效果,让你的可视化大屏瞬间上升10倍逼格

    文末有模板 一.大屏常见动态效果 1.图表轮播 使用场景:图表轮播是帆软图表中内置的功能,其作用是在同一区域轮播显示两个以上图表,图表之间有一定的关联关系或共同组成一个小的主题模块. 如下模板中,有三 ...

  • 不写代码,从0到1教你制作炫酷可视化大屏

    从大屏可视化出现以来,一直深受各界企业的追捧,最典型的就是每年淘宝的双十一销售额大屏,最近我也刚接触了一个大屏项目,借此总结了一些可视化大屏制作经验与大家分享.文章写的比较细,请耐心阅读 可视化大屏制 ...

  • Excel和PPT已经落后了,可视化大屏强在哪?一次看过瘾

    文末有... 今天看见这么一个问题: 我得说,这真是一个好问题!可能会有如下回答: Excel的数据透视表操作麻烦,用BI拖拽一下就能有结果 整合多源数据,很多类型的数据就能一起分析了 可视化快速.美 ...

  • 不用写代码的可视化大屏,一口气把工具和方法都教给你

    原创IT技术管理那些事儿2021-01-29 16:53:58 前段时间公司的领导偶尔看了阿里.天猫的大屏,也非要吵着要做可视化大屏,但是我们公司没有阿里天猫那样的技术基础和资金支撑,这可让我们IT部 ...

  • 20个炫酷的数据可视化大屏

    导读:今天给大家推荐一篇关于数据可视化大屏的文章,内容由本文作者 小F 整理,希望大家喜欢. 随着大数据的发展,可视化大屏在各行各业得到越来越广泛的应用. 可视化大屏不再只是电影里奇幻的画面,而是被实 ...