频道栏目
首页 > 程序开发 > 软件开发 > C# > 正文
c# 使用ChartDirector绘图的一些个人体会
2010-07-11 14:26:44           
收藏   我要投稿

引言:
      最近给客户做一个B/S架构的证券交易大屏幕软件,其中用到对证券指数的走势以及成交量的图形绘制,由于客户要求图形的清晰而且要做成于原来的老系统一样的图形显示效果,就试着用ChartDirector进行图形绘制,第一次用看着文档帮助是挺方便的,CTrl+C、CTrl+V就画出一个走势图,看着和客户给的效果图差不多,挺简单的,可到了想调整细节的时候却发现怎么都达不到想要的结果,然后到网上搜呀搜发现都是一些从帮助文档中拷贝出来的东西,而且很少有C#的,最终还是在VS智能提示的情况下凭着金山词霸的帮助将那一个个参数给试了出来,最终得到了想要的效果,好了废话不多说,下面说个人绘制的走势图主要代码(有所修改)

代码:

using ChartDirector;

     //生成图形数据信息,iWidth:与画布有关的宽度,iHeight:与画布有关的高度,dlChartData:Y轴数据
        private XYChart GetTrendChart( int iWidth, int iHeight,double[] dlChartData)
        {
            try
            {
                  /***********此处代码仅供参考,个人取得画第一个点时从Y轴的中心开始,并且对应证券开盘时间******************/
                double dlLin = dlChartData[0];
                double dlMax = dlChartData[0];
                //X轴数据
                string[] XData = new string[2880];
                for (int i = 0; i < dlChartData.Length; i++)
                {
                    XData[i] = " ";

                    //取最小数据
                    if (dlChartData[i] < dlLin)
                        dlLin = dlChartData[i];

                    //取最大数据
                    if (dlChartData[i] > dlMax)
                        dlMax = dlChartData[i];
                }

                //继续给未赋值的数据赋值
                for (int i = dlChartData.Length; i < 2880; i++)
                {
                    XData[i] = " ";
                }

                //最小数、最大数相对于第一个点的浮动大小
                double dlFir = Math.Abs(m_KPNum - dlLin);
                double dlSec = Math.Abs(m_KPNum - dlMax);
                double dlFloat = dlFir > dlSec ? dlFir : dlSec;

            /**********************************************/

            /*****************开始画图***********************/

                // 创建图形对象
                XYChart c = new XYChart(iWidth, iHeight);

                //设置Y轴
                double dMin = Math.Round(m_KPNum - dlFloat, 2);
                double dMax = Math.Round(m_KPNum + dlFloat, 2);
              
                if ((dMax - dMin) < dlChartData[0] * 0.5)
                {
                    dMax = Math.Round(dlChartData[0] + dlChartData[0] * 0.5,2);
                    dMin = Math.Round(dlChartData[0] - dlChartData[0] * 0.5,2);
                }
               
                  //设置Y轴的取值范围
                c.yAxis().setDateScale(dMin, dMax);

                  //设置Y轴要显示的网格线的个数为4
                c.yAxis().setLinearScale(dMin, dMax, (dMax - dMin) / 4);

                 //c.yAxis().setLabel();Y轴设置过Label后就不能自动生成曲线图了,需要自己去添加线层
                //c.yAxis().setLabelGap(10);//设置Y轴标签之间的缝隙
                //c.yAxis().setLabelStep((int)(dMax-dMin)/10);//设置Y轴标签数组的显示跨度
                //c.yAxis().setLabelFormat("{value}%");//格式化标签显示内容
                ////设置网格上边和标题下边的区域大小为(50, 30),字横向排列,字体为宋体,大小为9  
                //c.addLegend(50, 30, false, "Arial Bold", 9).setBackground(Chart.Transparent);  

              
  &n

点击复制链接 与好友分享!回本站首页
相关TAG标签 个人
上一篇:类型自定义格式字符串
下一篇:c# Radius 协议中的ipv6 处理算法思路
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站