ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

openpyxl操作之散点图:坐标轴交叉、逆序刻度值、次坐标轴等

2021-10-26 15:33:36  阅读:669  来源: 互联网

标签:openpyxl min max 交叉 chart 散点图 坐标轴 逆序


        上一篇文章主要写了openpyxl散点图的步骤和方法(点我查看上一篇文章),今天补充一下坐标轴选项的几个设置,主要是坐标轴交叉、逆序刻度值、次要坐标轴等,先看看Excel里对应的位置:

 

一、逆序刻度值

        所谓的“逆序刻度值”就是将坐标轴的最大值,最小值顺序转换为反向,绘制在这个坐标轴上的图形也会随之反向显示。比如,X轴最小值为0,最大值为25,正常的刻度值是0在左边,25在右边,逆序刻度值的效果为25在左边,0在右边(见下图):

         要达到这个效果,就需要进行坐标轴设置,代码如下:

#chart为散点图对象
chart.x_axis.scaling.min = 0
chart.x_axis.scaling.max = 25
chart.x_axis.scaling.orientation = "maxMin" #刻度值方向,从小到大,或从大到小

        特别要注意的是: 上述第三行代码必不可少。如果想偷懒直接用scaling.min = 25,scaling.max = 0的方式来逆序,会报错,因为openpyxl中min的值永远只能比max小,所以,需通过第三行代码来实现逆序刻度,scaling.orientation只有两个值,minMax和maxMin,分别为从小到大,从大到小(注意字母的大小写,第2个M为大写)。

        然而,仅仅做完这些还不够,因为你会发现,Y轴跑到右边去了,跟预期效果还差一点,这个时候,就涉及到另外一个概念:坐标轴交叉。

 二、坐标轴交叉

        通常,我们把Y轴和X轴的交叉点叫做坐标原点,常见Excel图的坐标原点一般位于图的左下角,表示为(0,0),在Excel里的坐标轴选项里,我们点Y轴,会出现“横坐标轴交叉”,点X轴,会出现“纵坐标轴交叉”。通过调整可改变原点的位置,那么在openpyxl里要如果做呢?上代码:

#chart为散点图对象    
chart.x_axis.crosses= 'min'  #min是“y轴的最小值”
chart.y_axis.crosses= 'max'  #max是“X轴的最大值”

         请注意上述代码中的注释。坐标轴交叉是相对的,一个轴是没法交叉的,所以,设置X轴的交叉为min,这个min的对象是Y轴,即X轴与Y轴在Y轴的最小值处交叉,Y轴的最小值是0,此时用坐标表示是(X,0)。同样,再设置Y轴的交叉为max,即交叉点为X轴的最大值,X轴的最大值是25,因此,最终的坐标原点就是(25,0),达到预期效果。

        补充一点,crosses的值有三个:min,max,autoZero,一般只用前两个。

三、次坐标轴

        当在一个图上添加多个数据系列时,如果有两个系列的数量级差别较大,则会导致数量级较小的系列的数据显得特别小,此时,就要用到次坐标轴,将数据系列分别选用不同的坐标轴和比例。openpyxl中,是通过两个图表叠加的方法来实现次坐标轴的,先看代码:

#假设有两个散点图对象c1、c2,已按正常步骤设置好样式
# 第一步:将一个表y轴设置为与x轴最大值交叉
c1.y_axis.crosses = "max"

#第二步:两个图叠加
c1 += c2

#第三步:添加工作表
ws.add_chart(c1, 'A1')

#再按正常步骤保存工作表即可。

         如果一个图同时有主坐标轴和次坐标轴,那么它的X轴数据必定是相同的,于是上述代码的操作思路就好理解了:两个图c1和c2,一个坐标轴设置为“ |__ ”型,另一个坐标轴设置为“ __| ”,两个图叠加到一起,就变为“ |__| ”的双Y轴样式了。

        比如下图中,系列1橙色点在主坐标轴上,系列2蓝色点在次坐标轴上。

         好了,今天就写到这里,其他类型的图表也可以借鉴此操作,如有疑问,欢迎交流。

标签:openpyxl,min,max,交叉,chart,散点图,坐标轴,逆序
来源: https://blog.csdn.net/y_996/article/details/120969729

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有