原創(chuàng)|其它|編輯:郝浩|2012-10-17 13:48:31.000|閱讀 2252 次
概述:項(xiàng)目中使用到ChartDirector繪制走勢(shì)圖,附加源代碼,大家分享分享
# 界面/圖表報(bào)表/文檔/IDE等千款熱門(mén)軟控件火熱銷(xiāo)售中 >>
相關(guān)鏈接:
最近給客戶(hù)做一個(gè)B/S架構(gòu)的證券交易大屏幕軟件,其中用到對(duì)證券指數(shù)的走勢(shì)以及成交量的圖形繪制,由于客戶(hù)要求圖形的清晰而且要做成于原來(lái)的老系統(tǒng)一樣的圖形顯示效果,就試著用ChartDirector進(jìn)行圖形繪制,下面說(shuō)個(gè)人繪制的走勢(shì)圖主要代碼(有所修改):
using ChartDirector; //生成圖形數(shù)據(jù)信息,iWidth:與畫(huà)布有關(guān)的寬度,iHeight:與畫(huà)布有關(guān)的高度,dlChartData:Y軸數(shù)據(jù) private XYChart GetTrendChart( int iWidth, int iHeight,double[] dlChartData) { try { /***********此處代碼僅供參考,個(gè)人取得畫(huà)第一個(gè)點(diǎn)時(shí)從Y軸的中心開(kāi)始,并且對(duì)應(yīng)證券開(kāi)盤(pán)時(shí)間******************/ double dlLin = dlChartData[0]; double dlMax = dlChartData[0]; //X軸數(shù)據(jù) string[] XData = new string[2880]; for (int i = 0; i < dlChartData.Length; i++) { XData[i] = " "; //取最小數(shù)據(jù) if (dlChartData[i] < dlLin) dlLin = dlChartData[i]; //取最大數(shù)據(jù) if (dlChartData[i] > dlMax) dlMax = dlChartData[i]; } //繼續(xù)給未賦值的數(shù)據(jù)賦值 for (int i = dlChartData.Length; i < 2880; i++) { XData[i] = " "; } //最小數(shù)、最大數(shù)相對(duì)于第一個(gè)點(diǎn)的浮動(dòng)大小 double dlFir = Math.Abs(m_KPNum - dlLin); double dlSec = Math.Abs(m_KPNum - dlMax); double dlFloat = dlFir > dlSec ? dlFir : dlSec; /**********************************************/ /*****************開(kāi)始畫(huà)圖***********************/ // 創(chuàng)建圖形對(duì)象 XYChart c = new XYChart(iWidth, iHeight); //設(shè)置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); } //設(shè)置Y軸的取值范圍 c.yAxis().setDateScale(dMin, dMax); //設(shè)置Y軸要顯示的網(wǎng)格線的個(gè)數(shù)為4 c.yAxis().setLinearScale(dMin, dMax, (dMax - dMin) / 4); //c.yAxis().setLabel();Y軸設(shè)置過(guò)Label后就不能自動(dòng)生成曲線圖了,需要自己去添加線層 //c.yAxis().setLabelGap(10);//設(shè)置Y軸標(biāo)簽之間的縫隙 //c.yAxis().setLabelStep((int)(dMax-dMin)/10);//設(shè)置Y軸標(biāo)簽數(shù)組的顯示跨度 //c.yAxis().setLabelFormat("{value}%");//格式化標(biāo)簽顯示內(nèi)容 ////設(shè)置網(wǎng)格上邊和標(biāo)題下邊的區(qū)域大小為(50, 30),字橫向排列,字體為宋體,大小為9 //c.addLegend(50, 30, false, "Arial Bold", 9).setBackground(Chart.Transparent); //設(shè)置與Y軸相關(guān)的顏色,其中最后一個(gè)參數(shù)為設(shè)置Y軸伸出坐標(biāo)的小頭的顏色,一般不想要的話就設(shè)置成畫(huà)布的背景色 c.yAxis().setColors(0xff0000, 0xff0000, 0xff0000, 0); //設(shè)置Y軸標(biāo)簽樣式 c.yAxis().setLabelStyle("simhei.ttf", 8, 0xFFFFFF); //設(shè)置Y軸標(biāo)簽的顏色(前兩個(gè)和最后一個(gè)顏色各自相同,中間一個(gè)為白色) 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}"); //設(shè)置X軸 //為了實(shí)現(xiàn)X軸上隔行變實(shí)現(xiàn)的效果,添加了幾個(gè)標(biāo)記 c.xAxis().addMark(720,0xff0000);//隔行實(shí)線 c.xAxis().addMark(1440, 0xff0000);//隔行實(shí)線 c.xAxis().addMark(2160, 0xff0000);//隔行實(shí)線 c.xAxis().setColors(0xff0000, 0xff0000, 0xff0000, 0); c.xAxis().setLabelStyle("simhei.ttf", 5, 0xFFFFFF); c.xAxis().setLabels(XData); c.xAxis().setLabelStep(360 //設(shè)置標(biāo)題 c.addTitle(Chart.Top, "上證指數(shù)", "Arial", 7.5, 0xffffff, 0x31319c); //繪制曲線圖所需的數(shù)據(jù) c.addLineLayer(dlChartData,0xffffff); //設(shè)置背景色為白色 橫坐標(biāo)和縱坐標(biāo)的網(wǎng)格線顏色,其中參數(shù)三和參數(shù)四為畫(huà)布的顏色,參數(shù)八和參數(shù)九為設(shè)置網(wǎng)格線為虛線(這里需要的為一個(gè)枚舉變量) c.setPlotArea(47, 18, iWidth - 50, iHeight - 23, 0, -1, 0xff0000, c.dashLineColor(0xff0000, Chart.DotLine), c.dashLineColor(0xff0000, Chart.DotLine)); //設(shè)置背景 c.setBackground(0); return c; } catch (Exception e) { throw e; } }
好了這個(gè)就是用ChartDirector實(shí)現(xiàn)一個(gè)虛線的網(wǎng)格線,并且隔行變實(shí)線,Y軸的標(biāo)簽顯示不同的顏色,X軸顯示的時(shí)間為正常的證券交易時(shí)間,曲線圖為相應(yīng)時(shí)間對(duì)應(yīng)的數(shù)據(jù)(在前面注釋部分提過(guò))的圖形,對(duì)于ChartDirector畫(huà)圖需要掌握它畫(huà)圖的原理,就能畫(huà)出想要的圖形對(duì)應(yīng)的坐標(biāo)標(biāo)簽,以下為提供的一些意見(jiàn)(僅供參考):
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:soaspx