坐标系是图表的重要组成部分,有了坐标系,图表中的每一个点,每一个基本图形元素的位置、长度度量、方向度量才能确定下来,它是一个基本的参照系。利用Excel提供的图表坐标系相关的对象及其属性和方法,可以对坐标系进行各种设置,以达成所需要的图形效果。[大谦Excel,dqexcel点com]
Axes对象和Axis对象
Excel中,用Axis对象表示单个的坐标轴,用其复数形式Axes对象表示多个坐标轴及它们组成的坐标系。对于二维平面坐标系,有水平轴和垂直轴两个坐标轴;对于三维空间坐标系,有三个方向上的坐标轴。
使用API使用方式,通过Chart对象获取Axis对象的语法格式如下所示。
axs=cht.Axes(Type,AxisGroup)
其中,cht为Chart对象,两个参数:
• Type - 为必选项,取值为1, 2或3。取值为1时坐标轴显示类别,常用于设置图表的水平轴;取值为2时坐标轴显示值,常用于设置图表的垂直轴;取值为3时坐标轴显示数据系列,只能用于3D图表。
• AxisGroup – 为可选项,指定坐标轴主次之分。当设置为2时,说明坐标轴为辅助轴。当设置为1时,说明坐标轴为主坐标轴。
下面首先选择绘图数据,使用Shapes对象的AddChart2方法创建一个表示图表的Shape对象,然后利用它的Chart属性获取Chart对象。
【Excel VBA】
示例文件的存放路径为Samples\ch18\Excel VBA\坐标系.xlsm。
Sub Test()
Dim cht As Chart
ActiveSheet.Range("A1:B7").Select
Set cht = ActiveSheet.Shapes.AddChart2(-1, xlColumnClustered, _
200, 20, 300, 200, True).Chart
End Sub
运行过程,生成图表如图6-9所示。
【Python xlwings API】
编写Python脚本,脚本文件的存放路径为Samples\ch18\Python\坐标系-创建图表.py。
import xlwings as xw #导入xlwings
import os #导入os
root = os.getcwd() #获取当前路径
app = xw.App(visible=True, add_book=False) #创建Excel应用,无工作簿
wb=app.books.open(root+r"/P1P2.xlsx",read_only=False) #打开文件,可写
sht=wb.sheets(1) #获取工作表
sht.api.Range("A1:B7").Select() #选择数据
cht=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlColumnClustered,\
200,20,300,200,True).Chart #创建图表
运行脚本,生成图表如图6-9所示。
利用Chart对象的Axes属性获取横坐标轴和纵坐标轴,并设置各坐标轴的属性。利用Border属性可以对坐标轴本身的颜色、线型、线宽等进行设置。
下面创建图表,设置两个坐标轴的Border属性,设置HasMinorGridlines属性的值为True,显示次级网格。
【Excel VBA】
示例文件的存放路径为Samples\ch18\Excel VBA\坐标系.xlsm。
图6-9 创建图表
Sub Test2()
Dim cht As Chart
Dim axs As Axis
ActiveSheet.Range("A1:B7").Select '数据
Set cht = ActiveSheet.Shapes.AddChart.Chart '添加图表
Set axs = cht.Axes(1) '水平轴
axs.Border.ColorIndex = 3 '红色
axs.Border.Weight = 3 '线宽
axs.HasMinorGridlines = True '显示次级网格线
Set axs2 = cht.Axes(2) '纵轴
axs2.Border.Color = RGB(0, 0, 255) '兰色
axs2.Border.Weight = 3 '线宽
axs2.HasMinorGridlines = True '显示次级网格线
End Sub
运行过程,生成图表如图6-10所示。
【Python xlwings API】
编写Python脚本,脚本文件的存放路径为Samples\ch18\Python\坐标轴设置.py。
#前面代码省略,请参见Python文件
#......
sht.api.Range("A1:B7").Select() #数据
cht=sht.api.Shapes.AddChart().Chart #添加图表
axs=cht.Axes(1) #水平轴
axs.Border.ColorIndex=3 #红色
axs.Border.Weight=3 #线宽
axs.HasMinorGridlines=True #显示次级网格线
axs2=cht.Axes(2) #纵轴
axs2.Border.Color=xw.utils.rgb_to_int((0,0,255)) #兰色
axs2.Border.Weight=3 #线宽
axs2.HasMinorGridlines=True #显示次级网格线
图形效果如图6-10所示。
图6-10 获取和设置坐标轴
坐标轴标题
使用Axis对象的HasTitle属性设置是否显示坐标轴标题,用AxisTitle属性设置坐标轴标题的文本内容。注意,必须设置HasTitle属性的值为True后才能设置AxisTitle属性。AxisTitle属性返回一个AxisTitle对象,利用它设置坐标轴标题的文本和字体。
下面接着6.3.1小节的绘图代码,给两个坐标轴添加标题。横坐标标题红色显示,字体倾斜;纵坐标标题字体加粗。
【Excel VBA】
示例文件的存放路径为Samples\ch18\Excel VBA\坐标系.xlsm。
Sub Test3()
Dim cht As Chart
Dim axs As Axis
ActiveSheet.Range("A1:B7").Select '数据
Set cht = ActiveSheet.Shapes.AddChart.Chart '添加图表
Set axs = cht.Axes(1) '水平轴
Set axs2 = cht.Axes(2) '纵轴
axs.HasTitle = True '横坐标有轴标题
axs.AxisTitle.Caption = "横坐标轴标题" '标题文本
axs.AxisTitle.Font.Italic = True '字体倾斜
axs.AxisTitle.Font.Color = RGB(255, 0, 0) '文字红色
axs2.HasTitle = True '纵轴有轴标题
axs2.AxisTitle.Caption = "纵坐标轴标题" '标题文本
axs2.AxisTitle.Font.Bold = True '字体加粗
End Sub
运行过程,生成图表如图6-11所示。
【Python xlwings API】
编写Python脚本,脚本文件的存放路径为Samples\ch18\Python\坐标轴标题.py。
#前面代码省略,请参见Python文件
#......
axs.HasTitle=True #横坐标有轴标题
axs.AxisTitle.Caption="横坐标轴标题" #标题文本
axs.AxisTitle.Font.Italic=True #字体倾斜
axs.AxisTitle.Font.Color=xw.utils.rgb_to_int((255,0,0)) #文字红色
axs2.HasTitle=True #纵轴有轴标题
axs2.AxisTitle.Caption="纵坐标轴标题" #标题文本
axs2.AxisTitle.Font.Bold=True #字体加粗
运行脚本,生成图表如图6-11所示。
图6-11 添加和设置坐标轴标题
数值轴取值范围
纵轴为数值轴。使用纵轴对象的MinimumScale和MaximumScale属性设置数值轴的最小值和最大值。
下面设置纵轴的最小值和最大值分别为10和200。
【Excel VBA】
示例文件的存放路径为Samples\ch18\Excel VBA\坐标系.xlsm。
Sub Test4()
'省略前面的代码,请参见文件
'……
axs2.MinimumScale = 10
axs2.MaximumScale = 200
End Sub
运行过程,设置效果如图6-12所示。注意纵轴,即数值轴的取值范围已经被修改,图表显示也相应的有变化。
【Python xlwings API】
编写Python脚本,脚本文件的存放路径为Samples\ch18\Python\坐标轴-数值轴取值范围.py。
#前面代码省略,请参见Python文件
#......
axs2.MinimumScale=10
axs2.MaximumScale=200
运行脚本,生成图表如图图6-12所示。
图6-12 设置纵轴的取值范围
刻度线
刻度线是坐标轴上的短线,用来辅助确定图表上各点的位置。刻度线有主刻度线和次刻度线。用Axis对象的MajorTickMark和MinorTickMark属性设置主刻度线和次刻度线。
MajorTickMark和MinorTickMark属性的取值如表6-5中所示,可以有不同的表示形式。
表6-5 刻度线设置参数的取值
| 名 称 | 值 | 说 明 |
|---|---|---|
| xlTickMarkCross | 4 | 跨轴 |
| xlTickMarkInside | 2 | 在轴内 |
| xlTickMarkNone | -4142 | 无标志 |
| xlTickMarkOutside | 3 | 在轴外 |
下面的代码将横坐标轴的主刻度线设置为跨轴形式,将次刻度线设置为轴内显示。
【Excel VBA】
示例文件的存放路径为Samples\ch18\Excel VBA\坐标系.xlsm。
Sub Test5()
'省略前面的代码,请参见文件
'……
axs.MajorTickMark = 4
axs.MinorTickMark = 2
End Sub
【Python xlwings API】
编写Python脚本,脚本文件的存放路径为Samples\ch18\Python\坐标轴-刻度线.py。
#前面代码省略,请参见Python文件
#......
axs.MajorTickMark = 4
axs.MinorTickMark = 2
用TickMarkSpacing属性返回或设置每隔多少个数据显示一个主刻度线,仅用于分类轴和系列轴,可以是1到31999之间的一个数值。
用MajorUnit和MinorUnit属性设置数值轴上的主要和次要刻度单位。
设置后数值轴上从最小值开始每隔40显示一个主刻度线,次刻度线之间的间隔是10。
设置MajorUnitIsAuto和MinorUnitIsAuto属性的值为True,Excel会自动计算数值轴上的主要和次要刻度单位。
设置MajorUnit和MinorUnit属性的值时,MajorUnitIsAuto和MinorUnitIsAuto属性的值自动设置为False。
刻度标签
坐标轴上与主刻度线位置对应的文本标签称为刻度标签,它们对主刻度线对应的数值或分类进行标注说明。
分类轴刻度标签的文本为图表中关联分类的名称。分类轴的默认刻度标签文本为数字,它们按照从左到右的顺序从1开始累加编号。使用TickLabelSpacing属性设置间隔多少个分类显示一个刻度标签。
数值轴刻度标签的文本数字对应于数值轴的MajorUnit, MinimumScale和MaximumScale属性。若要更改数值轴的刻度标签文字,必须更改这些属性的值。
Axis对象的TickLabels属性返回一个TickLabels对象,它表示坐标轴上的刻度标签。使用TickLabels对象的属性和方法,可以对刻度标签的字体、数字显示格式、显示方向、偏移量和对齐方式等进行设置。
下面设置数值轴刻度标签的数字显示格式、字体和显示方向。
【Excel VBA】
示例文件的存放路径为Samples\ch18\Excel VBA\坐标系.xlsm。
Sub Test6()
'省略前面的代码,请参见文件
'……
Set tl = axs2.TickLabels '纵轴刻度标签
tl.NumberFormat = "0.00" '数字格式
tl.Font.Italic = True '字体倾斜
tl.Font.Name = "Times New Roman" '字体名称
tl.Orientation = 45 '45度方向
End Sub
运行过程,生成图表如图6-13中数值轴的刻度标签所示。
【Python xlwings API】
编写Python脚本,脚本文件的存放路径为Samples\ch18\Python\坐标轴-刻度标签.py。
#前面代码省略,请参见Python文件
#......
tl=axs2.TickLabels #纵轴刻度标签
tl.NumberFormat = "0.00" #数字格式
tl.Font.Italic=True #字体倾斜
tl.Font.Name="Times New Roman" #字体名称
tl.Orientation=45 #45度方向
运行脚本,生成图表如图6-13所示。
图6-13 数值轴刻度标签的设置
代码中,TickLabels对象的Orientation属性指定刻度线标签的文本方向,当标签比较长时这个属性很有用。此属性的值可以设置为-90到90度。
用TickLabelPosition属性指定坐标轴上刻度标签的位置,值为表6-6中所示的常数或值。
表6-6 TickLabelPosition属性的取值
| 名 称 | 值 | 说 明 |
|---|---|---|
| xlTickLabelPositionHigh | -4127 | 图表的顶部或右侧 |
| xlTickLabelPositionLow | -4134 | 图表的底部或左侧 |
| xlTickLabelPositionNextToAxis | 4 | 坐标轴旁边(其中坐标轴不在图表的任意一侧) |
| xlTickLabelPositionNone | -4142 | 无刻度线 |
用TickLabelSpacing属性返回或设置刻度标签之间的分类数或数据系列数,即每隔几个分类显示一个刻度标签。仅用于分类轴和系列轴,可以是1到31999之间的一个数值。
设置TickLabelSpacingIsAuto属性的值为True,自动设置刻度标签的间距。[大谦Excel,dqexcel点com]