引言:
最近給客戶做一個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