PyEcharts
大约 10 分钟
PyEcharts配置项
全局配置项
全局配置项可通过 set_global_opts 方法设置
from pyecharts.charts import Bar, Line
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.globals import ThemeType, RenderType
Faker.choose()
Faker.values()
c = (
Bar(
# InitOpts: 初始化配置项
init_opts=opts.InitOpts(
width='700px',
height='400px', # 图表画布大小,css长度单位
renderer=RenderType.CANVAS, # 渲染风格,可选:canvas,svg
page_title='网页标题',
theme=ThemeType.WHITE, # 主题
bg_color='white' # 背景颜色
)
)
.add_xaxis(Faker.choose())
.add_yaxis('商家A', Faker.values())
.add_yaxis('商家B', Faker.values())
# 全局配置项
.set_global_opts(
# TitleOpts: 标题配置项
title_opts=opts.TitleOpts(
title='柱形图', # 主标题
title_link='https://www.baidu.com', # 主标题点击跳转链接
title_target='blank', # blank新窗口打开,self 当前窗口打开
subtitle='副标题', # 副标题
subtitle_link='https://www.baidu.com',
subtitle_target='blank',
# 位置
pos_left='20px',
pos_top='0px',
# pos_right
# pos_bottom
padding=10, # 内边距
item_gap=5, # 主标题和副标题之间的间隙
),
# DataZoomOpts:区域缩放配置项
datazoom_opts=opts.DataZoomOpts(
is_show=True, # 是否显示组件
type_='slider', # 组件的类型:slider, inside
is_realtime=True, # 拖动时是否实时更新图表
range_start=20, # 数据窗口的起始百分比
range_end=80, # 数据窗口的结束百分比
orient='horizontal', # horizontal 或 vertical
is_zoom_lock=False, # 是否锁定选择区域
),
# LegendOpts: 图例配置项
legend_opts=opts.LegendOpts(
# 图例类型: plain普通图例,scroll:可以滚动翻页的图例,用于图例较多的情况
type_='plain',
is_show=True, # 是否显示图例
pos_left='20%', # 图例位置:pos_left,pos_right,pos_top,pos_bottom
orient='vertical', # horizontal 或 vertical
# 选择模式
# True: 开启图例点击
# False: 关闭图例点击
# single: 单选
# multiple: 多选
selected_mode="multiple",
# 图标和文字的位置
align='left',
padding=10, # 内边距
item_gap=5, # 图例中每项之间的间距
item_width=30, # 项的宽度
item_height=15, # 项的高度
inactive_color='#ccc', # 图例关闭时的颜色,
# PyEcharts常见的图标: circle,rect,roundRect,triangle, diamond,arrow
legend_icon='roundRect'
),
# VisualMapOpts:视觉映射配置项
visualmap_opts=opts.VisualMapOpts(
is_show=True,
type_='color', # color 或 size
min_=0, # 最小值
max_=150, # 最大值
range_opacity=0.7, # 图元和文字透明度
range_text=['max', 'min'], # 两端的文本
range_color=['blue', 'green', 'red'], # 过渡颜色
orient='vertical', # horizontal 或 vertical
pos_right='5%',
pos_top='0%',
is_piecewise=True, # 是否为分段型
is_inverse=True # 是否反转
),
# TooltipOpts: 提示框配置项
tooltip_opts=opts.TooltipOpts(
is_show=True,
# 触发类型
# item: 数据项,一般用于:散点图,柱形图,饼图
# axis: 坐标轴,提示线,主要用于条形图,折线图等
trigger='item',
# 触发条件:
# mousemove, click, mousemove|click
trigger_on='click',
is_show_content=True, # 是否显示提示框浮层
# 标签内容的格式
# 字符串中的模板变量:
# {a}: 系列名series_name
# {b}: 数据名
# {c}:值
formatter='{a}: {b}-{c}',
background_color='black', # 背景颜色
border_color='white', # 边框颜色
border_width=1, # 边框宽度
),
# AxisOpts: 坐标轴配置项
xaxis_opts=opts.AxisOpts(
is_show=True, # 是否显示X轴
# 坐标轴类型:
# value: 数值轴,用于连续数据
# category: 类目轴,适用于离散数据,比如:星期一,星期二等
# time: 时间轴,适用于连续的时序数据
type_='category'
),
yaxis_opts=opts.AxisOpts(
# is_show=False,
# 不显示y轴的线
axisline_opts=opts.AxisLineOpts(is_show=False),
# 不显示y轴的刻度
axistick_opts=opts.AxisTickOpts(is_show=False)
)
)
)
c.render_notebook()
系列配置项
系列配置项可通过 set_series_opts 方法设置
c = (
Line(
# InitOpts: 初始化配置项
init_opts=opts.InitOpts(
width='700px',
height='400px'
)
)
.add_xaxis(Faker.choose())
.add_yaxis('商家A', Faker.values())
.add_yaxis('商家B', Faker.values())
# 全局配置项
.set_global_opts(
title_opts=opts.TitleOpts(title='折线图'),
# 提示线
tooltip_opts=opts.TooltipOpts(trigger='axis')
)
# 系列配置项
.set_series_opts(
# ItemStyleOpts: 图元样式配置项
itemstyle_opts=opts.ItemStyleOpts(
# 图的颜色
# 使用纯色
# RGB, rgb(120, 120, 120)
# RGBA, rgba(120, 120, 120, 0.5)
# 十六进制: #ccc
color='blue',
opacity=0.6,
border_color='green',
border_width=2
),
# LineStyleOpts: 线样式配置项
linestyle_opts=opts.LineStyleOpts(
is_show=True,
width=2, # 线宽
color='green', # 线颜色
type_='dashed' # solid,dashed,dotted
),
# LabelOpts:标签配置项
label_opts=opts.LabelOpts(
is_show=True,
# 位置:top, left, right, bottom
# inside, insideLeft,insideRight, insideTop,insideBottom
# 等
position='top', # 位置
color='red', # 颜色
font_size=14, # 大小
font_family='Arial', # 字体
font_style='italic', # 是否斜体,italic
font_weight='bold', # 是否加粗 bold
# 标签旋转,-90到90
rotate=-40
),
# MarkPointOpts:标记点配置项
markpoint_opts=opts.MarkPointOpts(
data=[
# type_: 特殊标记类型,min, max, average
# symbol: 标记点的图形
# symbol_size:标记点的大小
opts.MarkPointItem(type_='max', symbol='pin', symbol_size=50),
opts.MarkPointItem(type_='min'),
]
),
# 标记线
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_='average')
],
label_opts=opts.LabelOpts(
color='red'
)
)
)
)
c.render_notebook()
常见图形
饼图
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import *
from pyecharts.faker import Faker
c = (
Pie()
.add('', [list(x) for x in zip(Faker.choose(), Faker.values())])
.set_colors(['red', 'blue', 'green', 'orange', 'yellow', 'pink', 'black'])
.set_global_opts(
title_opts=opts.TitleOpts(title='设置颜色'),
legend_opts=opts.LegendOpts(type_='scroll', pos_left="80%", orient='vertica
l')
)
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}:{c}"))
)
c.render_notebook()
玫瑰图
c = (
Pie()
.add(
'',
[list(i) for i in zip(v, Faker.values())],
radius=['30%', '75%'],
center=['25%', '50%'],
rosetype='radius',
label_opts=opts.LabelOpts(is_show=False) # 不显示标签
)
.add(
'',
[list(i) for i in zip(v, Faker.values())],
radius=['20%', '55%'],
center=['75%', '50%'],
rosetype='area',
label_opts=opts.LabelOpts(is_show=True) # 显示标签
)
.set_global_opts(title_opts=opts.TitleOpts(title='玫瑰图'))
)
c.render_notebook()
柱状图
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis('商家A', Faker.values())
.add_yaxis('商家B', Faker.values())
.set_global_opts(
title_opts=opts.TitleOpts(
title='柱形图',
subtitle='副标题'
)
)
)
c.render_notebook()
堆叠柱状图
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis('商家A', Faker.values(), stack='abc')
.add_yaxis('商家B', Faker.values(), stack='abc')
.set_series_opts(
label_opts=opts.LabelOpts(is_show=False)
)
.set_global_opts(
title_opts=opts.TitleOpts(
title='堆叠柱形图',
subtitle='副标题'
),
# 旋转
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),
# 缩放
datazoom_opts=[
opts.DataZoomOpts(), # x轴拖拉缩放
opts.DataZoomOpts(type_='inside') # 鼠标滚轮缩放
]
)
)
c.render_notebook()
条形图
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis('商家A', Faker.values())
.add_yaxis('商家B', Faker.values())
# 翻转轴,条形图
.reversal_axis()
.set_series_opts(
label_opts=opts.LabelOpts(position='right')
)
.set_global_opts(
title_opts=opts.TitleOpts(title='条形图')
)
)
c.render_notebook()
直方图
不同系列柱子之间的距离
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis('商家A', Faker.values(), gap='0%')
.add_yaxis('商家B', Faker.values(), gap='0%')
.set_global_opts(
title_opts=opts.TitleOpts(title='不同系列柱间距离')
)
)
c.render_notebook()
单系列柱子之间的间距
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis('商家A', Faker.values(), category_gap=0)
.set_global_opts(
title_opts=opts.TitleOpts(title='直方图')
)
)
c.render_notebook()
雷达图
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import *
from pyecharts.faker import Faker
v1 = [[4300, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 14000, 28000, 31000, 42000, 21000]]
radar = Radar()
radar.add_schema(
schema=[
opts.RadarIndicatorItem(name='项目1', max_=6000),
opts.RadarIndicatorItem(name='项目2', max_=16000),
opts.RadarIndicatorItem(name='项目3', max_=30000),
opts.RadarIndicatorItem(name='项目4', max_=38000),
opts.RadarIndicatorItem(name='项目5', max_=60000),
opts.RadarIndicatorItem(name='项目6', max_=22000)
]
)
radar.add("数据1",v1,color="red")
radar.add("数据2",v2)
radar.render_notebook()
折线图
c = (
Line()
.add_xaxis(Faker.choose())
.add_yaxis('商家A', Faker.values())
.add_yaxis('商家B', Faker.values(), is_smooth=True) # 平滑曲线
.set_global_opts(
title_opts=opts.TitleOpts(title='折线图'),
# 提示线
tooltip_opts=opts.TooltipOpts(trigger='axis')
)
)
c.render_notebook()
-----------------------------------
c = (
Line(
init_opts=opts.InitOpts(width='600px', height='400px')
)
.add_xaxis(xaxis_data=Faker.week)
.add_yaxis(
series_name='',
y_axis=[120, 200, 150, 80, 70, 110, 130],
symbol='triangle', # 点符号类型: triangle三角形
symbol_size=20, # 点的大小
# 线条样式
linestyle_opts=opts.LineStyleOpts(
color='green', width=2, type_='dashed'
),
# 不显示标签
label_opts=opts.LabelOpts(is_show=False),
# 点的属性
itemstyle_opts=opts.ItemStyleOpts(
border_width=2, border_color='yellow', color='blue'
),
# 标注点
markpoint_opts=opts.MarkPointOpts(
data=[
opts.MarkPointItem(type_='max'), # 最大值
opts.MarkPointItem(type_='min'), # 最小值
]
),
# 标注线
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_='average') # 平均值
]
)
)
.set_global_opts(
yaxis_opts=opts.AxisOpts(
type_='value',
splitline_opts=opts.SplitLineOpts(is_show=True)
),
tooltip_opts=opts.TooltipOpts(trigger='axis')
)
)
c.render_notebook()
散点图
data = [
[10.0, 8.04],
[8.0, 6.95],
[13.0, 7.58],
[9.0, 8.81],
[11.0, 8.33],
[14.0, 9.96],
[6.0, 7.24],
[4.0, 4.26],
[12.0, 10.84],
[7.0, 4.82],
[5.0, 5.68],
]
# 把data中第一列数据排序
data.sort(key=lambda x: x[0])
x_data = [d[0] for d in data]
y_data = [d[1] for d in data]
c = (
Scatter(
init_opts=opts.InitOpts(width='800px', height='500px')
)
.add_xaxis(xaxis_data=x_data)
.add_yaxis(
'',
y_axis=y_data,
symbol_size=20,
label_opts=opts.LabelOpts(is_show=True)
)
.set_global_opts(
xaxis_opts=opts.AxisOpts(
type_='value',
splitline_opts=opts.SplitLineOpts(is_show=True)
),
yaxis_opts=opts.AxisOpts(
type_='value',
splitline_opts=opts.SplitLineOpts(is_show=True)
)
)
)
c.render_notebook()
箱线图
import pandas as pd
from pyecharts.charts import *
from pyecharts import options as opts
from pyecharts.globals import *
df = pd.read_csv(r"F:\study\比赛\大数据比赛\历史资料\2022废弃\2022大数据决赛高职组\数据\air_hefei_2021.csv",header=None,names=["Date", "Quality_grade", "AQI", "AQI_rank", "PM"])
df["Date"] = pd.to_datetime(df["Date"])
df["month"] = df["Date"].dt.month
def get_month(month):
if month in [1,2,3]:
return "q1"
elif month in [4,5,6]:
return "q2"
elif month in [7,8,9]:
return "q3"
else:
return "q4"
df["q"] = df["month"].apply(get_month)
groupData = df.groupby(df["q"])
q1Data = groupData.get_group("q1")
q2Data = groupData.get_group("q2")
q3Data = groupData.get_group("q3")
q4Data = groupData.get_group("q4")
q1Data = q1Data["AQI"].astype(int).tolist()
q2Data = q2Data["AQI"].astype(int).tolist()
q3Data = q3Data["AQI"].astype(int).tolist()
q4Data = q4Data["AQI"].astype(int).tolist()
data = [q1Data,q2Data,q3Data,q4Data]
c = Boxplot()
c.add_xaxis(['q1', 'q2', 'q3', 'q4'])
c.add_yaxis('q1', c.prepare_data(data))
c.render_notebook()
词云图
data = [
("花鸟市场", 1446),
("汽车", 928),
("视频", 906),
("电视", 825),
("Lover Boy 88", 514),
("动漫", 486),
("音乐", 53),
("直播", 163),
("广播电台", 86),
("戏曲曲艺", 17),
("演出票务", 6),
("给陌生的你听", 1),
("资讯", 1437),
("商业财经", 422),
("娱乐八卦", 353),
("军事", 331),
("科技资讯", 313),
("社会时政", 307),
("时尚", 43),
("网络奇闻", 15),
("旅游出行", 438),
("景点类型", 957),
("国内游", 927),
("远途出行方式", 908),
("酒店", 693),
("关注景点", 611),
("旅游网站偏好", 512),
("出国游", 382),
("交通票务", 312),
("旅游方式", 187),
("旅游主题", 163),
("港澳台", 104),
("本地周边游", 3),
("小卖家", 1331),
("全日制学校", 941),
("基础教育科目", 585),
("考试培训", 473),
("语言学习", 358),
("留学", 246),
("K12课程培训", 207),
("艺术培训", 194),
("技能培训", 104),
("IT培训", 87),
("高等教育专业", 63),
("家教", 48),
("体育培训", 23),
("职场培训", 5),
("金融财经", 1328),
("银行", 765),
("股票", 452),
("保险", 415),
("贷款", 253),
("基金", 211),
("信用卡", 180),
("外汇", 138),
("P2P", 116),
("贵金属", 98),
("债券", 93),
("网络理财", 92), ("信托", 90),
("征信", 76),
("期货", 76),
("公积金", 40),
("银行理财", 36),
("银行业务", 30),
("典当", 7),
("海外置业", 1),
("汽车", 1309),
("汽车档次", 965),
("汽车品牌", 900),
("汽车车型", 727),
("购车阶段", 461),
("二手车", 309),
("汽车美容", 260),
("新能源汽车", 173),
("汽车维修", 155),
("租车服务", 136),
("车展", 121),
("违章查询", 76),
("汽车改装", 62),
("汽车用品", 37),
("路况查询", 32),
("汽车保险", 28),
("陪驾代驾", 4),
("网络购物", 1275),
("做我的猫", 1088),
("只想要你知道", 907),
("团购", 837),
("比价", 201),
("海淘", 195),
("移动APP购物", 179),
("支付方式", 119),
("代购", 43),
("体育健身", 1234),
("体育赛事项目", 802),
("运动项目", 405),
("体育类赛事", 337),
("健身项目", 199),
("健身房健身", 78),
("运动健身", 77),
("家庭健身", 36),
("健身器械", 29),
("办公室健身", 3),
("商务服务", 1201),
("法律咨询", 508),
("化工材料", 147),
("广告服务", 125),
("会计审计", 115),
("人员招聘", 101),
("印刷打印", 66),
("知识产权", 32),
("翻译", 22),
("安全安保", 9),
("公关服务", 8),
("商旅服务", 2),
("展会服务", 2),
("特许经营", 1),
("休闲爱好", 1169),
("收藏", 412),
("摄影", 393), ("温泉", 230),
("博彩彩票", 211),
("美术", 207),
("书法", 139),
("DIY手工", 75),
("舞蹈", 23),
("钓鱼", 21),
("棋牌桌游", 17),
("KTV", 6),
("密室", 5),
("采摘", 4),
("电玩", 1),
("真人CS", 1),
("轰趴", 1),
("家电数码", 1111),
("手机", 885),
("电脑", 543),
("大家电", 321),
("家电关注品牌", 253),
("网络设备", 162),
("摄影器材", 149),
("影音设备", 133),
("办公数码设备", 113),
("生活电器", 67),
("厨房电器", 54),
("智能设备", 45),
("个人护理电器", 22),
("服饰鞋包", 1047),
("服装", 566),
("饰品", 289),
("鞋", 184),
("箱包", 168),
("奢侈品", 137),
("母婴亲子", 1041),
("孕婴保健", 505),
("母婴社区", 299),
("早教", 103),
("奶粉辅食", 66),
("童车童床", 41),
("关注品牌", 271),
("宝宝玩乐", 30),
("母婴护理服务", 25),
("纸尿裤湿巾", 16),
("妈妈用品", 15),
("宝宝起名", 12),
("童装童鞋", 9),
("胎教", 8),
("宝宝安全", 1),
("宝宝洗护用品", 1),
("软件应用", 1018),
("系统工具", 896),
("理财购物", 440),
("生活实用", 365),
("影音图像", 256),
("社交通讯", 214),
("手机美化", 39),
("办公学习", 28),
("应用市场", 23),
("母婴育儿", 14),
("游戏", 946),
("手机游戏", 565), ("PC游戏", 353),
("网页游戏", 254),
("游戏机", 188),
("模拟辅助", 166),
("个护美容", 942),
("护肤品", 177),
("彩妆", 133),
("美发", 80),
("香水", 50),
("个人护理", 46),
("美甲", 26),
("SPA美体", 21),
("花鸟萌宠", 914),
("绿植花卉", 311),
("狗", 257),
("其他宠物", 131),
("水族", 125),
("猫", 122),
("动物", 81),
("鸟", 67),
("宠物用品", 41),
("宠物服务", 26),
("书籍阅读", 913),
("网络小说", 483),
("关注书籍", 128),
("文学", 105),
("报刊杂志", 77),
("人文社科", 22),
("建材家居", 907),
("装修建材", 644),
("家具", 273),
("家居风格", 187),
("家居家装关注品牌", 140),
("家纺", 107),
("厨具", 47),
("灯具", 43),
("家居饰品", 29),
("家居日常用品", 10),
("生活服务", 883),
("物流配送", 536),
("家政服务", 108),
("摄影服务", 49),
("搬家服务", 38),
("物业维修", 37),
("婚庆服务", 24),
("二手回收", 24),
("鲜花配送", 3),
("维修服务", 3),
("殡葬服务", 1),
("求职创业", 874),
("创业", 363),
("目标职位", 162),
("目标行业", 50),
("兼职", 21),
("期望年薪", 20),
("实习", 16),
("雇主类型", 10),
("星座运势", 789),
("星座", 316),
("算命", 303),
("解梦", 196), ("风水", 93),
("面相分析", 47),
("手相", 32),
("公益", 90),
]
c = (
WordCloud()
.add(
'热点分析',
data_pair=data,
word_size_range=[6, 60], # 字体大小范围
textstyle_opts=opts.TextStyleOpts(
font_family='cursive' # 字体
)
)
)
c.render_notebook()