上一篇文章主要写了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蓝色点在次坐标轴上。
好了,今天就写到这里,其他类型的图表也可以借鉴此操作,如有疑问,欢迎交流。