曲面图

三维曲面是常见的数值型图表。用Excel绘制曲面图,需要提供规则网格数据。使用Excel图形引擎可以绘制曲面图,可以对曲面图进行着色、设置透明性和添加光照。

曲面+三维填充等值线

Excel可以直接绘制曲面图,它要求绘图数据按照指定的格式给出。如图4-46所示,在工作表中输入数据或打开数据文件。首先将行方向和列方向的数据按照从小到大的顺序排序,然后等间隔分割成很多小的区间,将间隔值显示在第1行和第1列。图4-25中根据行数据和列数据等间隔取了100个数,以它们为横坐标和纵坐标构造一个网格,在每个节点输入数据,该数据可能是横坐标和纵坐标的函数值。

Document Image
\[\]

图4-46 绘制曲面图和等值线图的数据

下面的代码利用给定数据绘制曲面图叠加颜色填充的三维等值线图。完整代码见:Samples->ch07 数值型图表->25 曲面图->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r’/data.xlsx’,read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets(‘Sheet1’)    #获取指定工作表对象
sht.api.Range('A1:CW100').Select()    #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlSurface,20,20,300,300,True)
cht=shp.Chart    #获取图表
set_style(cht)    #设置样式

运行代码生成图4-47。

Document Image Document Image
\[\]

图4-47 曲面叠加三维填充等值线 图4-48 线框模型

曲面模型

用Excel可以绘制两种形式的曲面模型,即曲面模型和线框模型。图4-47中为曲面模型,线框模型只包括曲面的网格线,不包括面,如图4-48所示。

下面的代码利用给定数据绘制曲面图的线框模型。完整代码见:Samples->ch07 数值型图表->26 曲面模型->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r’/data.xlsx’,read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets(‘Sheet1’)    #获取指定工作表对象
sht.api.Range('A1:CW100').Select()    #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlSurfaceWireframe,20,20,300,300,True)
cht=shp.Chart    #获取图表
set_style(cht)    #设置样式

运行代码生成图4-48。

曲面的颜色、透明度和光照

对于生成的曲面图,可以改变曲面的颜色、透明度等,可以添加光照。

下面的代码利用给定数据绘制曲面图并修改曲面的颜色、透明度,设置光照。完整代码见:Samples->ch07 数值型图表->27 曲面着色->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r’/data.xlsx’,read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets(‘Sheet1’)    #获取指定工作表对象
sht.api.Range('A1:CW100').Select()    #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlSurface,20,20,300,300,True)
cht=shp.Chart    #获取图表
n=cht.SeriesCollection().Count    #序列个数
for i in range(n):    #获取并修改每个序列
    fl=cht.SeriesCollection(i+1).Format.Fill
    fl.Visible=True
    fl.ForeColor.RGB=xw.utils.rgb_to_int((255,128,0))    #修改每个序列的颜色
    fl.ForeColor.Brightness=0.2    #修改每个序列的亮度
    fl.Transparency=0.3    #修改每个序列的透明度
set_style(cht)    #设置样式
cht.HasLegend=False    #不显示图例

运行代码生成图4-49。

Document Image
\[\]

图4-49 曲面着色

等值线图和填充等值线图

用Excel曲面数据可以绘制等值线图和填充等值线图。等值线图如图4-38所示,根据数据绘制等值线并将相邻等值线之间的网格线用同一种颜色绘制;填充等值线如图4-39所示,它将相邻等值线之间区域用同一种颜色填充。

Document Image Document Image
\[\]

图4-50 等值线图 图4-51 填充等值线图

下面的代码利用给定数据绘制等值线图。完整代码见:Samples->ch07 数值型图表->28 等值线图->py2.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r’/data.xlsx’,read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets(‘Sheet1’)    #获取指定工作表对象
sht.api.Range('A1:CW100').Select()    #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlSurfaceTopViewWireframe,20,20,300,300,True)
cht=shp.Chart    #获取图表
set_style(cht)    #设置样式

运行代码生成图4-51。

下面的代码利用给定数据绘制填充等值线图。完整代码见:Samples->ch07 数值型图表->28 等值线图->py.py。

code.python
root=os.getcwd()    #获取当前工作路径
app=xw.App(visible=True,add_book=False)    #创建Excel应用
wb=app.books.open(root+r’/data.xlsx’,read_only=False)    #打开数据文件返回工作簿对象
sht=wb.sheets(‘Sheet1’)    #获取指定工作表对象
sht.api.Range('A1:CW100').Select()    #数据
shp=sht.api.Shapes.AddChart2(-1,xw.constants.ChartType.xlSurfaceTopView,20,20,300,300,True)
cht=shp.Chart    #获取图表
set_style(cht)    #设置样式

运行代码生成图4-51。