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()