ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 834|回复: 1

[求助] 关于绘制图表并将图表旋转

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-13 15:20 | 显示全部楼层 |阅读模式
本帖最后由 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"

好了,剩下的就具体看附件吧









旋转图表.zip

167.99 KB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-20 17:38 | 显示全部楼层
这是使用vba绘制散点图的一个例子,供参考

绘图.zip

27.3 KB, 下载次数: 4

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 20:38 , Processed in 0.034899 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表