2009年4月9日星期四

學習使用 Chart.AlignDataPointsByAxisLabel 方法

Chart 控制項的 AlignDataPointsByAxisLabel 方法會讓所有的資料點沿著 X 軸以其座標軸標籤來對齊。當圖表擁有多個數列,這些數列的資料點都是以實際存在的順序來繪製,並且它們的 X 值都是字串時,就非常適合使用 AlignDataPointsByAxisLabel 方法來對齊數列。

6-16_1
6-16_2
6-16_3

以第一個圖表而言,它的 X 座標軸使用第一個數列的 X 值作為座標軸標籤,這些數列會依照其資料點的索引(也就是實際存在順序)來繪製,但是這三個數列中位於相同索引的X值是不同的。接著請注意下方的兩個圖表,在勾選了核取方塊 使用座標軸標籤對齊資料 之後,所有資料點的X值會獨一成為座標軸標籤,並且透過這些座標軸標籤來對齊資料點,而這正是透過呼叫圖表的 AlignDataPointsByAxisLabel 方法來達成的,程式碼如下所列:

protected void Page_Load(object sender, System.EventArgs e)
{
LoadData();

if (AlignSeries.Checked)
{
Chart1.AlignDataPointsByAxisLabel(
RadioButtonList1.SelectedItem.Text == "遞增排序" ? PointSortOrder.Ascending : PointSortOrder.Descending);
}
}

private void LoadData()
{
// 清除舊的資料點。
foreach (Series ser in Chart1.Series)
{
ser.Points.Clear();
ser.IsXValueIndexed = false;

// 使用資料點的座標軸標籤作為資料點標籤。
ser.Label = "#AXISLABEL";
}

// 初始化數列 1 的陣列。
double[] yval1 = { 12, 16, 5 };
string[] xval1 = { "章立民", "王旭剛", "陳瑪莉" };

// 初始化數列 2 的陣列。
double[] yval2 = { 9, 5, 3 };
string[] xval2 = { "章立民", "王旭剛", "Alex" };

// 初始化數列 3 的陣列。
double[] yval3 = { 6, 5 };
string[] xval3 = { "陳瑪莉", "Gavin" };

// 將數列繫結至陣列。
Chart1.Series["Series1"].Points.DataBindXY(xval1, yval1);
Chart1.Series["Series2"].Points.DataBindXY(xval2, yval2);
Chart1.Series["Series3"].Points.DataBindXY(xval3, yval3);
}

本文節錄自近期即將出版的 “ASP.NET 3.5 圖表與實務模組大全”一書。

章立民研究室 2009/04/09 10:30 PM

6 意見:

  1. 我想利用 chart 來呈現類似在某一時間區間內的訊號值,例如 2009/4/22 19:00 - 19:30。

    因為訊號數值出現頻率不是很固定,所以想請問 MS Chart Control 是否 X-Axis 有支援 DateTime 屬性?? 或是其他替代的方式呈現??

    謝謝~~
    回覆刪除
  2. Hi 翔,

    我們對您的問題並不是十分理解。不過,可以肯定的是,ASP.NET 3.5 Chart 控制項的 X 軸支援使用日期時間型別。
    回覆刪除
  3. 老師您好:
    最近開始拜讀您撰寫的這本書
    小弟有個問題想請教
    就是我現在有一堆溫度的數據
    其溫度有上下限值
    當我用SQL與法把溫度數據撈出來用線圖表現出來之後
    我要如何在圖形上再補上溫度的上下限值於圖表中
    回覆刪除
  4. 章老師您好

    請問在 Chart 圖式上的數字為閱讀方便,
    能否將數字撇位?例如:1234 -> 1,234
    麻煩告知如何設定?

    謝謝
    回覆刪除
  5. 老師你好:『請問你出版的ASP.NET3.5圖表與實務案例模組大全使用vb 』這本書所介紹的chart元件可以做出雷達圖的效果嗎?
    回覆刪除
  6. Hi 景淮,

    可以製作出雷達圖。
    回覆刪除