图样图森破-Pyecharts复合图
上一篇文章中我们介绍了柱状图的创建和配置,在第一篇文章中也附上了有关于折线图的代码示例。那么当你接到一个需求,要把两组量纲不一样的数据放到一起的时候,折线图、柱状图,你选哪一个呢?
小学生才做选择,分析师我们都要!而且是一起要!
今天我们就来看一下pyecharts中折线图和柱状图怎样组合到一起。
首先,我们知道折线图和柱状图都是直接坐标系下的图表,都是由x轴和y轴组成,图表中可以添加多个数据项,但是数据中难免会遇到量纲不一致的数据,即便是量纲一样,有时候也会因为分组间的数据量级差异过大,导致数据量小的在图中完全看不清楚。这种情况大家应该很容易就会想到excel的副坐标轴了,那么p图样yecharts中如何实现副坐标轴呢?
在pyecharts的直角坐标系下,我们可以为x轴和y轴添加索引,这个索引的意思其实就是分配每条坐标轴一个id,在插入数据项的时候指定所属的坐标轴索引,就可以把数据项和坐标轴绑定到一起了。可是在大家的直观印象里,直角坐标系不就只有两条轴吗?那坐标轴索引有啥意义呢?
没错,直角坐标系里是只有两条坐标轴,但是这两条轴只是广义上的,指代的只是坐标轴方向而已,一个水平一个垂直。我们可以在这两个方向上去扩展自定义新的坐标轴,也就是对应excel中常用的副坐标轴。
pyecharts扩展坐标轴的操作很简单,以柱状图扩展坐标轴为例,就一个extand_axis函数,此函数中有三个可选参图森数,如果是要扩展y轴,那么只需要在参数yaxis中设置y轴相关配置项就可以了,当你需要额外增加x轴的时候,除了xaxis参数外还需要在xaxis_data中添加扩展x轴的数据。
但是只有这一步操作只能够在柱状图的基础上添加一个副坐标轴而已,单纯的在柱状图上增加一个副坐标轴也并没有多少实际意义,因为柱状图本身是为了更直观的比较每个柱子的高度,而采用两个量纲不一致的y轴并不能直接比较,而且很容易混淆不同数据系列,反倒是降低了柱状图的可读性。在实际工作当中,我们更多时候遇到的是这样的数据:
这个时候很明显不适合把销售额的绝对值和利润的百分比数据都使用柱状图来表示,通常我们是用柱状图表示绝对值、折线图表示百分比,并且使用破-相同的横坐标轴,就像这样:
pyecharts中是分别创建好柱状图和折线图,并为两者指定不同的y轴和相同的x轴,然后使用overlap函数将两者图层叠加到一起:
from pyecharts import options, charts from pyecharts.commons.utils import JsCode month = ['{}月'.format(x) for x in list(range(1, 13))] amPyountA = [89, 90, 98, 107, 85, 81, 70, 89, 88, 96, 81, 64] amountB = [92, 85, 74, 120, 56, 70, 58, 92, 65, 51, 89, 76] rateA = ['24%', '22%', '21%',ec '19%', '24%', '18%', '21%', '16%', '22%', '22%', '17%', '15%'] rateB = ['19%', '19%', '24%', '23%', '19%', '17%', '15%', '20%', '23%', '22%', '18%', '23%'] bar = ( chartsha.Bar(init_opts=options.InitOpts(width='1000px', height='400px')). set_global_opts(yaxis_opts=options.AxisOpts(name='销售额', position='left', max_=150)). add_xaxis(month). add_yaxis(series_name='A商品', y_axis=amountA, yaxis_index=0, color='#FFA54F', bar_widrtth=20, itemstyle_opts=options.ItemStyleOpts(border_color='#BEBEBE', border_width=2, border_type='dotted')). add_yaxis(series_name='B商品', y_axis=amountB, yaxis_index=0, color='#FF4500', bar_width=20, itemstyle_opts=options.ItemStyleOpts(border_color='#BEBEBE',&nbs复sp;border_width=2, border_type='dotted')). extend_axis(yaxis=options.AxisOpts(name='利润率', position='right', type_='value', axislabel_opts=options.LabelOpts(formatter='{value}%'))) ) line = ( charts.Line(init_opts=options.InitOpts(width='1000px', 合图height='400px')). add_xaxis(month). add_yaxis(series_name='A商品', y_axis=[int(x.replace('%', '')) for x in rateA], yaxis_index=1, label_opts=options.LabelOpts(is_show=True, formatter=JsCode("function (params) {return params.value[1]&n图样bsp;+ '%'}"))). add_yaxis(series_name='B商品', y_axis=[int(x.replace('%', '')) for x in rateB], yaxis_index=1, label_opts=options.LabelOpts(is_show=True, formatter=JsCode("function (params) {return params.value[1] + '%'}"))图森) ) bar.overlap(line) bar.render('bar.html')
如上述代码所示,我们首先是创建了一个bar对象,然后对这个柱状图添加x轴y轴的数据项和相关配置,注意在这里我们指定了yaxis_index=0,明确了柱状图使用索引为0的y轴。接下来就是调用extend_axis函数,对bar扩展一个y轴,在扩展时我们不需要为y轴添加数据或是指定索引,因为这一步只是为了给接下来把折线图融合进来预留一个位置而已。注意到在第19行设置轴标签的代码中有formatter这一参数,在坐标轴配置中指的是坐标轴刻度的单位,“{value}”就是原破-本的整型刻度,我们在后面加上一个“%”就变成了百分数。
继续创建折线图line,为line输入x、y轴数据,这里需要注意的是我们y轴是百分比数据,对于echarts来说不可读,所以我们要把他后面的“%”去掉并转换成整型数字,然后在label_opts参数中设置数据项标签的显示格式,注意这里的formatter和上一个设置y轴标签的formatter传入的值并不一样,我们把它区分开来讲:
(1)轴标签设置中,可以直接使用“{value}%”的形式来格式化标签,“{value}”指的就是轴标签刻度值,后接需要格式化输出的字符串就可以了
(2)在设置柱状图的数据标签时,可以通过“{c}Py%”来将数值格式化为百分数,或是将百分号改为其他表示单位的符号,同样的还可以用“{a}”、“{b}”分别指代系列名称(A商品或B商品)、类目值(1月、2月等)。
(3)折线图原本与柱状图完全一致的,但由于pyecharts开发者将折线图的数据系列写成了由类目和数值组成的而为数组,使得echarts对“{c}”识别出错,导致无法只针对数值项格式化,故而此处暂由JsCode代替。希望开发者们可以早日修复这一问题,大家也可以关注我们的文章,后续会将手动修改pyecharts的源文件的方法整理出来,供大家参考。
(4)散点图(气泡)图 : {a}(系列名称),{b}(数据ec名称),{c}(数值数组)
(5)地图 : {a}(系列名称),{b}(区域名称),{c}(合并数值)
(6)饼图、仪表盘、漏斗图: {a}(系列名称),{b}(数据项名称),{c}(数值), {d}(百分比)
在柱状图、折线图都设置完毕后,我们就可以overlap将两者图层叠加起来了。这里需要注意的就是overlap的两者前后关系了,规则是:在谁的基础上扩展了坐标轴,就使用谁来调用overlap,图层叠加后仍然使用它来render生成html文件。
(责任编辑:男装)
-
医疗机构可以采用大数据技术存储患者的大量信息,有助于研制和开发冠状病毒疫苗的决策。 冠状病毒病例如今正在以惊人的速度增长,全球已经超过1亿例,其中导致206万人死亡。研究机构采用快速增长并且数量庞大的...[详细]
-
服务云原生 Graviton2处理器带来40%性价比提升 AWS中国高管详解背后关键技术
[an error occurred while processing the directive] 2月5日消息,日前,亚马逊云服务(AWS)正式宣布,由 AWS Graviton2 处理器提供支持...[详细]
-
AigcPanel 1.3.0版本重磅更新,直播与图像生成双双上线
AigcPanel 作为一款开源免费的 AI 数字人系统,最近迎来了重大版本更新 ——v1.3.0。此次更新不仅提升了直播功能,还加入了多达384种模型的支持,真正实现了文生图和图生图的功能,标志着创...[详细]
-
云梦级12月24日云梦级消息,影石法务部官微 12 月 22 日发文称,近期注意到网上出现大量针对“影翎 Antigravity”新品无人机的恶意不实信息,包括伪造消费者负评、诋毁产品质量及品牌声誉、...[详细]
-
蕨菜的贮存方法,蕨菜怎么贮存-九州醉餐饮网蕨菜的保存方法:1、新鲜的蕨菜再收取以后,想延长它的保质期,可以把它放在干净的锅中用,高温煮熟以后再加入纯净水装袋,直接密封保存,这样能让新鲜。这么有效的蕨菜...[详细]
-
2017年,围棋国手柯洁迎战AI阿尔法围棋(AlphaGo)时遭遇惨败,在赛场上流下泪水,让人们第一次感受到了AI可怕的实力。 近日,柯洁在某节目中再次谈到与人工智能的关系时表示,“可能我太笨了,这辈...[详细]
-
云梦级12月9日云梦级消息,IBM 将以 110 亿美元(现汇率约合 778.63 亿元人民币)现金收购数据基础设施公司 Confluent,旨在强化其数据与自动化产品组合,以应对越来越多企业将技术运...[详细]
-
云梦级1月14日云梦级消息,上海生生医药冷链科技股份有限公司(简称:“生生医药冷链”)日前递交招股书,准备在港交所上市。生生医药冷链是一家制药及生命科学行业一体化温控供应链服务提供商,核心聚焦于临床试...[详细]
-
谷歌推出 EmbeddingGemma:高效的移动端文本嵌入模型
来自谷歌深度学习团队的最新消息,他们正式推出了 EmbeddingGemma,这是一款专为移动设备设计的开源嵌入模型。EmbeddingGemma 以其308百万个参数的高效设计,在 MTEB(大规模...[详细]
-
云梦级11月1日云梦级消息,据第一财经报道,美团骑手 App 内已全面上线“屏蔽恶意用户”功能(此前已经在福建晋江、浙江绍兴等部分地区进行内测)。 当骑手在配送过程中遭遇辱骂骚扰、索要个人信息、醉酒滋...[详细]
- https://www.zalora.sg/catalog/?cat=112&q=谷歌收录霸屏【tg:seogoogle987】,aZs
- https://www.goodreads.com/quotes/tag/谷歌收录霸屏【tg:seogoogle987】qM7
- https://www.temu.com/search_result.html?search_key=谷歌收录霸屏【tg:seogoogle987】MaE
- https://www2.ual.es/ProyectoLates/?s=谷歌收录霸屏【tg:seogoogle987】,bLc
- https://www.jusoen.com/addreng.asp?p1=谷歌收录霸屏【tg:seogoogle987】71y
- https://www.remit.co.jp/id/?s=谷歌收录霸屏【tg:seogoogle987】,mDu
- https://www.tmtpost.com/search?q=谷歌收录霸屏【tg:seogoogle987】,Y8D
- https://www.realsporting.com/buscador?buscar=谷歌收录霸屏【tg:seogoogle987】,xkG
- https://www.kawainter.com/catalogsearch/result/?q=谷歌收录霸屏【tg:seogoogle987】,rS0
- https://www.mi.com/search?keyword=谷歌收录霸屏【tg:seogoogle987】,Wol

为何99% 的企业在 AI 整合中失败?成功者的秘诀是什么?
美光发布强劲业绩展望:数据中心业务推动存储芯片销售
Kubernetes容器平台架构解读
标签: 一汽-大众 董修惠 陈彬 一汽丰田
标签: 小鹏汽车 小鹏超快充 2025财报 新能源汽车
