|
本帖最后由 dogingate 于 2019-1-13 15:23 编辑
问题:如何让图形的y轴是从上到下进行绘制的?
其实说起来很简单,就是x和y轴的数据对换下,附件里有两个文件,第一个graph.xls文档是从文档里找来的,给出了一种旋转图表的画法,注意其中的曲线和坐标轴全是用散点图画的,这给了我一种启发,用于解决我的问题
我现在的问题是三组数据,也就是三条曲线,但是是三个不同的y轴,尝试了x和y轴数据对换的方式,不是很理想,就只能另找他路了,详见附件
绘图的话,首先要创建一个chartobject容器,譬如画板,vba里称为plotarea
Set oChartObject = oSht.ChartObjects.Add(500, 100, 800, 200)
然后在这个画板上创建一个chart对象,譬如画纸,vba里称为chartarea
Set oChart = oChartObject.Chart
你可以使用指定chartarea和plotarea的线形就知道是怎么一回事了
with ochart
.ChartArea.Border.LineStyle = xlLineStyleNone 'XlLineStyle 枚举
.PlotArea.Border.LineStyle = xlLineStyleNone
end with
然后就是在这个画纸上创建散点图啦,首先要指定类型
With oChart
.ChartType = xlXYScatterSmoothNoMarkers 'XlChartType 枚举
end with
然后就是创建一个series对象,也就是你所要画的曲线
Set oSeries = oChart.SeriesCollection.NewSeries
指定这个sereies对象的属性,xvalues为x轴坐标,values为y轴坐标,name为曲线名,axisgroup为坐标轴(主坐标轴或次坐标轴)
With oSeries
.XValues = oSht.Range(oSht.Cells(2, intXColNum), oSht.Cells(intEndRowNum, intXColNum))//x轴坐标值
.Values = oSht.Range(oSht.Cells(2, intYColNum), oSht.Cells(intEndRowNum, intYColNum))//y轴坐标值
.Name = strName//名字
.AxisGroup = intAxisGroup '主坐标轴//坐标轴
End With
运行之后就会在chart上出现一条曲线,尔后你可以设置其他的属性,详见series的方法和属性
上面是绘制曲线的,那么坐标轴怎么绘制呢,也是类似的,只不过要指定标签
其中arrText为所要显示的标签值,可以与x轴或y轴的值相同,也可以另外指定如下
arrText = oSht.Range(oSht.Cells(2, 21), oSht.Cells(intEndRowNum, 21))
这个坐标轴其实就是一条曲线series,曲线上有很多点,每个点的标签需要进行设置,那么就用到下面的语句
With oSeries
.HasDataLabels = True//对这个坐标轴有标签,即设置hasdatalabels属性为true
For i = 1 To .Points.Count//对这个坐标轴上的散点进行循环
Set oPoint = .Points(i)
oPoint.DataLabel.Text = arrText(i, 1)//某个点的标签
oPoint.DataLabel.Position = xlLabelPositionLeft 'XlDataLabelPosition 枚举//某个点的标签的位置
oPoint.DataLabel.Orientation = xlUpward 'xlDownward,xlHorizontal,xlUpward,xlVertical//某个点标签的文字方向
oPoint.MarkerStyle = xlMarkerStyleDot 'XlMarkerStyle 枚举//某个点的标记类型,就是 和坐标轴垂直的那个小横线
oPoint.MarkerSize = 5//某个点的标记大小
Next i
End With
绘制图表之后,将画板ochart中的图表复制为图表到“表格"这个工作表中,并进行旋转
为什么要这样呢?因为ochart没有旋转这个功能,只有shape有,所以只能这么操作啦
With oChart
.CopyPicture appearance:=xlScreen, Format:=xlBitmap '''XlPictureAppearance 枚举,XlCopyPictureFormat 枚举
Worksheets("表格").Paste Destination:=Worksheets("表格").Range("a1")
Set oShps = Worksheets("表格").Shapes
For i = 1 To oShps.Count
Set oShp = oShps(i)
oShp.IncrementRotation 90
Next i
end with
如果想把图表保存为图片的话,就用chart的export方法
ochart..Export Filename:=ThisWorkbook.Path & "\" & "1.jpg", filtername:="jpg"
好了,剩下的就具体看附件吧
|
|