xlwings中用chart(Chart)对象表示图表,3.2节介绍的创建图表的方法可以直接返回chart(Chart)对象,或通过Shape对象的Chart属性间接获取Chart对象。然后利用chart(Chart)对象的属性和方法就可以对图表的类型、坐标系、标题、图例等进行各种设置。
对于多变量数据绘制的复合图表类型,图中的每组简单图形称为一个序列。可以从复合图形中获取序列对象并利用其属性和方法进行设置。比如改变这个序列表示的一组简单图形的图表类型、颜色、线型、点标记和数据标签等。[大谦Excel,dqexcel点com]
图表类型
创建Excel图表时需要指定图表类型。Excel支持近百种常见图表类型。可以用Excel直接指定,也可以用Python xlwings在编程时进行指定。
Excel图表支持数十种图表类型,对于对象Chart,设置图表类型如下所示:
code.vba
cht.ChartType=xlColumnClustered
ChartType属性的取值如表2-1所示。
表2-1 Excel的图表类型
| 常数名称 | 值 | 说 明 |
|---|---|---|
| xl3DArea | -4098 | 三维面积图 |
| xl3DAreaStacked | 78 | 三维堆栈面积图 |
| xl3DAreaStacked100 | 79 | 百分比堆栈面积图 |
| xl3DBarClustered | 60 | 三维复合条形图 |
| xl3DBarStacked | 61 | 三维堆栈条形图 |
| xl3DBarStacked100 | 62 | 三维百分比堆栈条形图 |
| xl3DColumn | -4100 | 三维柱形图 |
| xl3DColumnClustered | 54 | 三维复合柱形图 |
| xl3DColumnStacked | 55 | 三维堆栈柱形图 |
| xl3DColumnStacked100 | 56 | 三维百分比堆栈柱形图 |
| xl3DLine | -4101 | 三维折线图 |
| xl3DPie | -4102 | 三维饼图 |
| xl3DPieExploded | 70 | 分离型三维饼图 |
| xlArea | 1 | 饼图 |
| xlAreaStacked | 76 | 堆栈面积图 |
| xlAreaStacked100 | 77 | 百分比堆栈面积图 |
| xlBarClustered | 57 | 复合条形图 |
| xlBarOfPie | 71 | 复合条饼图 |
| xlBarStacked | 58 | 堆栈条形图 |
| xlBarStacked100 | 59 | 百分比堆栈条形图 |
| xlBubble | 个 | 泡泡图 |
| xlBubble3DEffect | 87 | 三维泡泡图 |
| xlColumnClustered | 51 | 复合柱形图 |
| xlColumnStacked | 52 | 堆栈柱形图 |
| xlColumnStacked100 | 53 | 百分比堆栈柱形图 |
| xlConeBarClustered | 102 | 复合条形圆锥图 |
| xlConeBarStacked | 103 | 堆栈条形圆锥图 |
| xlConeBarStacked100 | 104 | 百分比堆栈条形圆锥图 |
| xlConeCol | 105 | 三维柱形圆锥图 |
| xlConeColClustered | 99 | 复合柱形圆锥图 |
| xlConeColStacked | 100 | 堆栈柱形圆锥图 |
| xlConeColStacked100 | 101 | 百分比堆栈柱形圆锥图 |
| xlCylinderBarClustered | 95 | 复合条形圆柱图 |
| xlCylinderBarStacked | 96 | 堆栈条形圆柱图 |
| xlCylinderBarStacked100 | 97 | 百分比堆栈条形圆柱图 |
| xlCylinderCol | 98 | 三维柱形圆柱图 |
| xlCylinderColClustered | 92 | 复合柱形圆锥图 |
| xlCylinderColStacked | 93 | 堆栈柱形圆锥图 |
| xlCylinderColStacked100 | 94 | 百分比堆栈柱形圆柱图 |
| xlDoughnut | -4120 | 圆环图. |
| xlDoughnutExploded | 80 | 分离型圆环图 |
| xlLine | 4 | 折线图 |
| xlLineMarkers | 65 | 数据点折线图 |
| xlLineMarkersStacked | 66 | 堆栈数据点折线图 |
| xlLineMarkersStacked100 | 67 | 百分比堆栈数据点折线图 |
| xlLineStacked | 63 | 堆栈折线图 |
| xlLineStacked100 | 64 | 百分比堆栈折线图 |
| xlPie | 5 | 饼图 |
| xlPieExploded | 69 | 分离型饼图 |
| xlPieOfPie | 68 | 复合饼图 |
| xlPyramidBarClustered | 109 | 复合条形棱锥图 |
| xlPyramidBarStacked | 110 | 堆栈条形棱锥图 |
| xlPyramidBarStacked100 | 111 | 百分比堆栈条形棱锥图 |
| xlPyramidCol | 112 | 三维柱形棱锥图 |
| xlPyramidColClustered | 106 | 复合柱形棱锥图 |
| xlPyramidColStacked | 107 | 堆栈柱形棱锥图 |
| xlPyramidColStacked100 | 108 | 百分比堆栈柱形棱锥图 |
| xlRadar | -4151 | 雷达图. |
| xlRadarFilled | 82 | 填充雷达图 |
| xlRadarMarkers | 81 | 数据点雷达图 |
| xlRegionMap | 140 | 地图 |
| xlStockHLC | 88 | 盘高-盘低-收盘图 |
| xlStockOHLC | 89 | 开盘-盘高-盘低-收盘图 |
| xlStockVHLC | 90 | 成交量-盘高-盘低-收盘图 |
| xlStockVOHLC | 91 | Volume-开盘-盘高-盘低-收盘图 |
| xlSurface | 83 | 三维曲面图 |
| xlSurfaceTopView | 85 | 曲面图(俯视图) |
| xlSurfaceTopViewWireframe | 86 | 曲面图(俯视线框图) |
| xlSurfaceWireframe | 84 | 三维曲面图(线框图) |
| xlXYScatter | -4169 | 散点图 |
| xlXYScatterLines | 74 | 折线散点图 |
| xlXYScatterLinesNoMarkers | 75 | 无数据点折线散点图 |
| xlXYScatterSmooth | 72 | 平滑线散点图 |
| xlXYScatterSmoothNoMarkers | 73 | 无数据点平滑线散点图 |
利用3.2节提供的数据,下面用Shapes对象的AddChart2方法创建更多类型的图表。完整代码见:Samples->ch03图表基础-> 07 图表类型->py.py。
code.vba
Sub CreateCharts()
ActiveSheet.Range("A1").CurrentRegion.Select '数据
ActiveSheet.Shapes.AddChart2 -1, xlColumnClustered, _
20, 150, 300, 200, True
ActiveSheet.Shapes.AddChart2 -1, xlBarClustered, _
400, 150, 300, 200, True
ActiveSheet.Shapes.AddChart2 -1, xlConeBarStacked, _
20, 400, 300, 200, True
ActiveSheet.Shapes.AddChart2 -1, xlLineMarkersStacked, _
400, 400, 300, 200, True
ActiveSheet.Shapes.AddChart2 -1, xlXYScatter, _
20, 650, 300, 200, True
ActiveSheet.Shapes.AddChart2 -1, xlPieOfPie, _
400, 650, 300, 200, True
End Sub
运行代码,生成不同类型的图表如图2-4所示。
\[\]
图2-4 创建不同类型的图表
设置和修改图表的属性
创建图表后,可以用Excel或Python xlwings对图表属性进行设置和修改。
前一小节用Chart对象的ChartType属性设置了图表的类型,实际上,Chart对象还有很多其他属性和方法,使用它们可以对图表进行各种设置。Chart对象常见的属性和方法如表2-2所示。这些属性和方法的用法在后面会陆续进行介绍。
表2-2 Chart对象的常用属性
| 名 称 | 意 义 |
|---|---|
| BackWall | 返回Walls对象,该对象允许用户单独对三维图表的背景墙进行格式设置 |
| BarShape | 条形的形状 |
| ChartArea | 返回ChartArea对象,该对象表示图表的整个图表区 |
| ChartStyle | 返回或设置图表的图表样式。可以使用介于1到48之间的数字设置图表样式 |
| ChartTitle | 返回ChartTitle对象,表示指定图表的标题 |
| ChartType | 返回或设置图表类型 |
| Copy | 将图表工作表复制到工作簿的另一位置 |
| CopyPicture | 将图表以图片的形式复制到剪贴板 |
| DataTable | 返回DataTable对象,表示此图表的数据表 |
| Delete | 删除图表 |
| Export | 将图表以图片格式导出到文件 |
| HasAxis | 返回或设置图表上显示的坐标轴 |
| HasDataTable | 如果图表有数据表,则该属性值为True,否则为False |
| HasTitle | 设置是否显示标题 |
| Legend | 返回一个Legend对象,表示图表的图例 |
| Move | 将图表工作表移动到工作簿中的另一位置 |
| Name | 图表的名称 |
| PlotArea | 返回一个PlotArea对象,表示图表的绘图区 |
| PlotBy | 返回或设置行或列在图表中作为数据系列使用的方式。可为以下XlRowCol常量之一:xlColumns或xlRows |
| SaveAs | 图表另存到不同的文件中 |
| Select | 选择图表 |
| SeriesCollection | 返回包含图表所有序列的集合 |
| SetElement | 设置图表元素 |
| SetSourceData | 绑定绘制图表的数据 |
| Visible | 返回或设置一个XlSheetVisibility值,用于确定对象是否可见 |
| Walls | 返回一个Walls对象,此表示三维图表的背景墙 |