Pyecharts之漏斗图(Funnel)

Pyecharts之漏斗图(Funnel)

一.基本概念

class pyecharts.charts.Funnel

class Funnel(
    # 初始化配置项,参考 `global_options.InitOpts`
    init_opts: opts.InitOpts = opts.InitOpts()
)

func pyecharts.charts.Funnel.add

def add(
    # 系列名称,用于 tooltip 的显示,legend 的图例筛选。
    series_name: str,

    # 系列数据项,格式为 [(key1, value1), (key2, value2)]
    data_pair: Sequence,

    # 是否选中图例
    is_selected: bool = True,

    # 系列 label 颜色
    color: Optional[str] = None,

    # 数据排序, 可以取 'ascending','descending','none'(表示按 data 顺序)
    sort_: str = "descending",

    # 数据图形间距
    gap: Numeric = 0,

    # 标签配置项,参考 `series_options.LabelOpts`
    label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),

    # 提示框组件配置项,参考 `series_options.TooltipOpts`
    tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,

    # 图元样式配置项,参考 `series_options.ItemStyleOpts`
    itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)

二.代码示例

1.Funnel_sort_ascending

from snapshot_selenium import snapshot as driver

from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot
from pyecharts import options as opts
from pyecharts.charts import Funnel
from pyecharts.faker import Faker

c = (
    Funnel()
    .add(
        "商品",
        [list(z) for z in zip(Faker.choose(), Faker.values())],
        sort_="ascending",
        label_opts=opts.LabelOpts(position="inside"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-Sort(ascending)"),toolbox_opts=opts.ToolboxOpts())
)

make_snapshot(driver,c.render("funnel_sort_ascending.html"),"funnel_sort_ascending.png")

2.Funnel_base

from pyecharts import options as opts
from pyecharts.charts import Funnel
from pyecharts.faker import Faker

c = (
    Funnel()
    .add("商品", [list(z) for z in zip(Faker.choose(), Faker.values())])
    .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-基本示例"))
    #.render("funnel_base.html")
)

make_snapshot(driver,c.render("funnel_base.html"),"funnel_base.png")

3.Funnel_chart

import pyecharts.options as opts
from pyecharts.charts import Funnel


x_data = ["展现", "点击", "访问", "咨询", "订单"]
y_data = [100, 80, 60, 40, 20]

data = [[x_data[i], y_data[i]] for i in range(len(x_data))]

(
    Funnel(init_opts=opts.InitOpts(width="1600px", height="800px"))
    .add(
        series_name="",
        data_pair=data,
        gap=2,
        tooltip_opts=opts.TooltipOpts(trigger="item", formatter="{a} <br/>{b} : {c}%"),
        label_opts=opts.LabelOpts(is_show=True, position="inside"),
        itemstyle_opts=opts.ItemStyleOpts(border_color="#fff", border_width=1),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="漏斗图", subtitle="纯属虚构"))
    #.render("funnel_chart.html")
)

make_snapshot(driver,c.render("funnel_chart.html"),"funnel_chart.png")

4.Funnel_label_inside

from pyecharts import options as opts
from pyecharts.charts import Funnel
from pyecharts.faker import Faker


c = (
    Funnel()
    .add(
        "商品",
        [list(z) for z in zip(Faker.choose(), Faker.values())],
        label_opts=opts.LabelOpts(position="inside"),
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="Funnel-Label(inside)"))
    #.render("funnel_label_inside.html")
)

make_snapshot(driver,c.render("funnel_label_inside.html"),"funnel_label_inside.png")

三.实例演示

数据具体处理过程链接:去哪儿

1.数据处理及获取

import pandas as pd

data=pd.read_csv("travel2.csv")
data.head()
地点 短评 出发时间 天数 人均费用 人物 玩法 浏览量
0 婺源 春天的婺源,油菜花开,宛如一幅诗情画意的水墨画 /2020/04/01 5 3000 三五好友 第一次 美食 9055
1 阿联酋 阿联酋|小狮妹和父母的新年迪拜之旅 /2019/12/10 8 - - - 3860
2 AguadePau 来自《一个女生的古巴独行记》(11日自由行攻略) /2019/09/27 11 20000 独自一人 深度游 美食 摄影 国庆 261
3 建水 云南│我什么也没忘,但有些事只适合收藏 /2019/10/10 8 4000 三五好友 穷游 摄影 古镇 赏秋 国庆 6176
4 日本 日本|东京の72小时 /2019/09/21 8 - - - 1.2万
import re

def Look(e):
    
    if '万' in e:
        num=re.findall('(.*?)万',e)
        return float(num[0])*10000
    else:
        return float(e)
    
data['浏览次数']=data['浏览量'].apply(Look)
data.drop(['浏览量'],axis=1,inplace=True)
data['浏览次数']=data['浏览次数'].astype(int)
data.head(7)
地点 短评 出发时间 天数 人均费用 人物 玩法 浏览次数
0 婺源 春天的婺源,油菜花开,宛如一幅诗情画意的水墨画 /2020/04/01 5 3000 三五好友 第一次 美食 9055
1 阿联酋 阿联酋|小狮妹和父母的新年迪拜之旅 /2019/12/10 8 - - - 3860
2 AguadePau 来自《一个女生的古巴独行记》(11日自由行攻略) /2019/09/27 11 20000 独自一人 深度游 美食 摄影 国庆 261
3 建水 云南│我什么也没忘,但有些事只适合收藏 /2019/10/10 8 4000 三五好友 穷游 摄影 古镇 赏秋 国庆 6176
4 日本 日本|东京の72小时 /2019/09/21 8 - - - 12000
5 海宁 海洪宁静,盐潮入官,百里钱塘,春暖花开--驾“浙”观大潮访金庸、赏樱花睡房车 /2020/03/23 2 900 情侣 自驾 赏樱 踏春 清明 22000
6 敦煌 甘青│到远方去,到那个山野苍茫的远方,熟悉的地方没有景色 /2019/05/10 10 3500 三五好友 环游 毕业游 穷游 14000
data1=data.head(7)
data1
地点 短评 出发时间 天数 人均费用 人物 玩法 浏览次数
0 婺源 春天的婺源,油菜花开,宛如一幅诗情画意的水墨画 /2020/04/01 5 3000 三五好友 第一次 美食 9055
1 阿联酋 阿联酋|小狮妹和父母的新年迪拜之旅 /2019/12/10 8 - - - 3860
2 AguadePau 来自《一个女生的古巴独行记》(11日自由行攻略) /2019/09/27 11 20000 独自一人 深度游 美食 摄影 国庆 261
3 建水 云南│我什么也没忘,但有些事只适合收藏 /2019/10/10 8 4000 三五好友 穷游 摄影 古镇 赏秋 国庆 6176
4 日本 日本|东京の72小时 /2019/09/21 8 - - - 12000
5 海宁 海洪宁静,盐潮入官,百里钱塘,春暖花开--驾“浙”观大潮访金庸、赏樱花睡房车 /2020/03/23 2 900 情侣 自驾 赏樱 踏春 清明 22000
6 敦煌 甘青│到远方去,到那个山野苍茫的远方,熟悉的地方没有景色 /2019/05/10 10 3500 三五好友 环游 毕业游 穷游 14000
datas=[z for z in zip(data1["地点"].tolist(),data1["浏览次数"].tolist())]
datas
[('婺源', 9055),
 ('阿联酋', 3860),
 ('AguadePau', 261),
 ('建水', 6176),
 ('日本', 12000),
 ('海宁', 22000),
 ('敦煌', 14000)]
a=[1,2,3]
a.
[2, 3]

2.展示

datas
[('婺源', 9055),
 ('阿联酋', 3860),
 ('AguadePau', 261),
 ('建水', 6176),
 ('日本', 12000),
 ('海宁', 22000),
 ('敦煌', 14000)]
from pyecharts import options as opts
from pyecharts.charts import Funnel

f=(
    Funnel(init_opts=opts.InitOpts(width="1000px",height="600px"))
    .add(
        series_name="地点",
        data_pair=datas,
        gap=2,
        tooltip_opts=opts.TooltipOpts(trigger="item",formatter="{a} <br/>{b}:{c}"),
        label_opts=opts.LabelOpts(is_show=True,position="inside"),
        itemstyle_opts=opts.ItemStyleOpts(border_color="#fff",border_width=1)
    )
    .set_global_opts(title_opts=opts.TitleOpts(title="地点",subtitle="浏览数"))
)

make_snapshot(driver,f.render("qunar_funnel.html"),"qunar.png")
from pyecharts.globals import CurrentConfig,NotebookType

CurrentConfig.NOTEBOOK_TYPE=NotebookType.JUPYTER_LAB

f.load_javascript()
<pyecharts.render.display.Javascript at 0x1073d21f188>
f.render_notebook()


原文地址:https://www.cnblogs.com/LQ6H/p/12940534.html