原創|其它|編輯:郝浩|2012-10-17 13:48:31.000|閱讀 2263 次
概述:項目中使用到ChartDirector繪制走勢圖,附加源代碼,大家分享分享
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
最近給客戶做一個B/S架構的證券交易大屏幕軟件,其中用到對證券指數的走勢以及成交量的圖形繪制,由于客戶要求圖形的清晰而且要做成于原來的老系統一樣的圖形顯示效果,就試著用ChartDirector進行圖形繪制,下面說個人繪制的走勢圖主要代碼(有所修改):
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);  
               
                //設置與Y軸相關的顏色,其中最后一個參數為設置Y軸伸出坐標的小頭的顏色,一般不想要的話就設置成畫布的背景色
                c.yAxis().setColors(0xff0000, 0xff0000, 0xff0000, 0);
                //設置Y軸標簽樣式
                c.yAxis().setLabelStyle("simhei.ttf", 8, 0xFFFFFF);
                //設置Y軸標簽的顏色(前兩個和最后一個顏色各自相同,中間一個為白色)
                c.yAxis().setMultiFormat(Chart.SelectItemFilter(0), "<*color=23ff45*> {value}");
                c.yAxis().setMultiFormat(Chart.SelectItemFilter(1), "<*color=23ff45*> {value}");
                c.yAxis().setMultiFormat(Chart.SelectItemFilter(2), "<*color=FFffFF*> {value}");
                c.yAxis().setMultiFormat(Chart.SelectItemFilter(3), "<*color=ff2345*> {value}");
                c.yAxis().setMultiFormat(Chart.SelectItemFilter(4), "<*color=ff2345*> {value}");
                //設置X軸
                //為了實現X軸上隔行變實現的效果,添加了幾個標記
                c.xAxis().addMark(720,0xff0000);//隔行實線 
                c.xAxis().addMark(1440, 0xff0000);//隔行實線
                c.xAxis().addMark(2160, 0xff0000);//隔行實線
                c.xAxis().setColors(0xff0000, 0xff0000, 0xff0000, 0);
                c.xAxis().setLabelStyle("simhei.ttf", 5, 0xFFFFFF);
                c.xAxis().setLabels(XData);
                c.xAxis().setLabelStep(360
                //設置標題
                c.addTitle(Chart.Top, "上證指數", "Arial", 7.5, 0xffffff, 0x31319c);
       
                //繪制曲線圖所需的數據
                c.addLineLayer(dlChartData,0xffffff);
                //設置背景色為白色 橫坐標和縱坐標的網格線顏色,其中參數三和參數四為畫布的顏色,參數八和參數九為設置網格線為虛線(這里需要的為一個枚舉變量)
                c.setPlotArea(47, 18, iWidth - 50, iHeight - 23, 0, -1, 0xff0000, c.dashLineColor(0xff0000, Chart.DotLine), c.dashLineColor(0xff0000, Chart.DotLine));
                //設置背景
                c.setBackground(0);      
                return c;
            }
            catch (Exception e)
            {
                throw e;
            }
        }
好了這個就是用ChartDirector實現一個虛線的網格線,并且隔行變實線,Y軸的標簽顯示不同的顏色,X軸顯示的時間為正常的證券交易時間,曲線圖為相應時間對應的數據(在前面注釋部分提過)的圖形,對于ChartDirector畫圖需要掌握它畫圖的原理,就能畫出想要的圖形對應的坐標標簽,以下為提供的一些意見(僅供參考):
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自:soaspx