添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
超简单,用Python Pyecharts制作可视化大屏

超简单,用Python Pyecharts制作可视化大屏

经常有小伙伴问,如何制作数据可视化大屏?

今天主要详细讲一下Pyecharts制作可视化大屏。

​注意,本文由于篇幅问题不会放置全部代码,会在提供 文末 全部代码的下载。

ECharts是由百度开源的基于JS的商业级数据图表库,有很多现成的图表类型和实例,而Pyecharts则是为了方便我们使用Python实现ECharts的绘图。使用Pyecharts制作可视化大屏,可以分为两步:

1、使用分别Pyecharts分别制作各类图形;

2、使用Pyecharts中的组合图表功能,将所有图片拼接在一张html文件中进行展示。

小五认为影响大屏美观最重要的两个因素就是: 配色 布局 !在本文中,会特意强调这两点。

Pyecharts可视化

本文缩减了图表,只选用2020东京奥运会各国金牌分布图、2020东京奥运会奖牌榜详情、2020东京奥运会中国各项目获奖详情。

这类图表都很简单,参照官方文档直接复制示例就可以学习。图表配色都使用的Pyecharts默认颜色,大家实际使用时尽量形成自己的风格。

Map世界地图

Pyecharts绘制世界地图时,名称必须是英文。所以我们在前文中引入了 国家名称中英文对照表 ,左连接形成了 df4

单独提取英文名称和奖牌总数两列数据,用来可视化。

data_list=[[i,j] for i,j in zip(df4['英文名称'],df4['奖牌总数'])]
data_list[:5]

数据准备好了,开始利用pyecharts绘制世界地图。

from pyecharts import options as opts
from pyecharts.charts import Map
c = (
    Map()
    .add("", data_list, "world",
          is_map_symbol_show=False,
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    .set_global_opts(
        title_opts=opts.TitleOpts(title="2020东京奥运会各国金牌分布图"),
        visualmap_opts=opts.VisualMapOpts(max_=100)
c.render_notebook()

非常简单

同理,依次绘制其他两类图形。

柱状图、饼图

柱状图(Bar)

from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
    Bar()
    .add_xaxis(df4['名称'].head(25).tolist())
    .add_yaxis("金牌", df4['金牌'].head(25).tolist(), stack="stack1")
    .add_yaxis("银牌", df4['银牌'].head(25).tolist(), stack="stack1")
    .add_yaxis("铜牌", df4['铜牌'].head(25).tolist(), stack="stack1")
    .set_series_opts(label_opts=opts.LabelOpts(is_show=True, position="inside", font_size=12, color='#FFFFFF'))
    .set_global_opts(title_opts=opts.TitleOpts(title="2020东京奥运会奖牌榜详情"),
                     xaxis_opts=opts.AxisOpts(type_='category',
                                              axislabel_opts=opts.LabelOpts(
                                                  rotate=45),
c.render_notebook()

饼图(Pie)

from pyecharts import options as opts
from pyecharts.charts import Pie
c = (
    Pie()
    .add("", [['跳水', 12], ['射击', 11], ['举重', 8], ['竞技体操', 8], ['乒乓球', 7], ['游泳', 6], ['羽毛球', 6], ['田径', 5], ['静水皮划艇', 3], ['蹦床体操', 3], ['自由式摔跤', 3], ['赛艇', 3], ['空手道', 2], ['拳击', 2], ['帆船', 2], ['花样游泳', 2], ['跆拳道', 1], ['场地自行车赛', 1], ['古典式摔跤', 1], ['击剑', 1], ['三人篮球', 1]],
         center=["50%", "60%"],)
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
c.render_notebook()

这样需要用到的三张图表就绘制好了。

Pyecharts组合图表

Pyecharts进行可视化大屏第二步就是组合图表,大致可分为四类:

  • Grid:并行多图
  • Page:顺序多图
  • Tab:选项卡多图
  • Timeline:时间线轮播多图

官方文档: pyecharts.org/#

这里用Page(顺序多图)居多,在组合图表之前,还要先把前面的图表绘制代码改为函数。

def map_world() -> Map:
    c = (
        Map(init_opts=opts.InitOpts(chart_id=2, bg_color='#ADD8E6'))
        .add("", data_list, "world",
             is_map_symbol_show=False,
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
            title_opts=opts.TitleOpts(title="2020东京奥运会各国金牌分布图"),
            visualmap_opts=opts.VisualMapOpts(max_=100)
    return c

顺便还在其中增加了背景颜色 bg_color 、图表ID chart_id ,后者用于多图表时定位区分。背景颜色的话,我选择了淡蓝色#ADD8E6。后续图片的布局是根据图表ID的对应关系进行布局,所以每张图都要分别设置其id。

接着使用 page = Page(layout= Page.DraggablePageLayout) 模式对图片进行展示,这一步是为了调整布局。

page = Page(layout=Page.DraggablePageLayout, page_title="2020东京奥运会奖牌榜")
# 在页面中添加图表
page.add(
    title(),
    map_world(),