2010-12-06 13 views
2

私はasp:Chartのコントロールを持っており、それは素晴らしい動作しています。私は単にそれをミリ(ミリリットルの形式で)回してから、リクエストの平均的な長さの値を渡しています。次のコードは、私が必要とするものを実行します。(私が船に乗っていればそれをマークして、私はチャートコントロールが初めてです)。ASP.Netチャート - チャートに使用されていない余分なデータを含むラベル?

私のデータは次のようにするためのテーブルである:

Date by Hours 9:00 10:00 11:00 12:00 13:00 14:00 15:00 16:00 17:00 18:00 
12/03/2010  8 43 53 55 33 46 51 60 50  9 
Friday  1.773 1.337 1.242 1.239 1.340 1.191 1.479 1.223 1.178 1.516 

は私に素敵なチャートを提供します。私の質問は、このコードを下回っている:

List<double> yValues = new List<double>(); 
List<string> xValues = new List<string>(); 

// First and Last columns do not contain chartable data 
for (int i = 1; i < dtResults.Columns.Count - 1; i++) { 
    double d; 
    if (double.TryParse(dtResults.Rows[1][i].ToString(), out d)) 
     yValues.Add(d == 0 ? double.NaN : d); 
    else 
     yValues.Add(double.NaN); 
} // foreach of the Average Time Values the chart 

// foreach of the column names 
for (int i = 1; i < dtResults.Columns.Count - 1; i++) 
    xValues.Add(dtResults.Columns[i].ColumnName); 

this.Chart.Titles["Title1"].Text = string.Format(
    "Average Request Time In Seconds On {0:MM/dd/yyyy} Between {1:HH} and {2:HH} In {3}", 
    this.DateRange.BeginDate.Value, 
    this.ucsTimePicker.BeginTime, 
    this.ucsTimePicker.EndTime, 
    this.SelectedSourceEnvironmentName 
); 
this.Chart.Series["Series1"].Points.DataBindXY(xValues, yValues); 
this.Chart.Series["Series1"].ChartType = SeriesChartType.Line; 
this.Chart.Series["Series1"].IsValueShownAsLabel = true; 
this.Chart.Series["Series1"]["ShowMarkerLines"] = "true"; 
this.Chart.Series["Series1"].Label = "#VALY{0.000}"; // Make sure they have only 3 decimal places 

this.Chart.ChartAreas["ChartArea1"].AxisX.IsMarginVisible = true; 
this.Chart.ChartAreas["ChartArea1"].AxisX.Title = "Hours of the Day"; 
this.Chart.ChartAreas["ChartArea1"].AxisY.Title = "Time in Seconds"; 

// Handle styling when there is a Zero or missing value 
this.Chart.Series["Series1"].EmptyPointStyle.Color = Color.Red; 
this.Chart.Series["Series1"].EmptyPointStyle.BorderWidth = 3; 
this.Chart.Series["Series1"].EmptyPointStyle.BorderDashStyle = ChartDashStyle.Dash; 
this.Chart.Series["Series1"].EmptyPointStyle.MarkerStyle = MarkerStyle.Diamond; 
this.Chart.Series["Series1"].EmptyPointStyle.MarkerColor = Color.Red; 
this.Chart.Series["Series1"].EmptyPointStyle.MarkerSize = 8; 
this.Chart.Series["Series1"].EmptyPointStyle.MarkerBorderColor = Color.Black; 
this.Chart.Series["Series1"]["EmptyPointValue"] = "Zero"; 

あり(上記の表の小数点以下の数字)を示すラベルがあるが、私がやりたいことはまたラベルを持っている第2回である要求の合計数を表示します上の表のデータの行。私は以下のコードで、グラフに値を追加することができました:任意のフィットを投げていないように見えた

for (int i = 1; i < dtResults.Columns.Count - 1; i++) { 
    int n; 
    if (int.TryParse(dtResults.Rows[0][i].ToString(), out n)) 
    this.Chart.Series["Series1"].Points.AddY(n); 
    else 
    this.Chart.Series["Series1"].Points.AddY(0); 
} // foreach of the Count of Request within the Hour values 

が、私は、次の調整で値にアクセスできませんでした:

this.Chart.Series["Series1"].Label = "#VALY{0.000}\n#VALY2{0}"; 

を私が得るのは、元の値(1.773)が2回表示されることだけです。

グラフ作成のためだけのデータをグラフに追加してアクセスする方法はありますか?

答えて

1

ここで助けがなくても(実際に私に衝撃を与える)、私はこのサイトの外でいくつかの助けを借りてそれを理解することができました。基本的に、私は「余分な」データを追加する必要はありませんが、私はちょうど、次のような一般的なラベルを有するのとは対照的に、各ラベルを変更する必要があります:

this.Chart.Series["Series1"].Label = "#VALY{0.000}"; // Make sure they have only 3 decimal places  

私はまた、次の行を取らなければなりませんでした:

this.Chart.Series["Series1"].IsValueShownAsLabel = true; 

はそうちょうど簡潔にするために、ここで私の最初の行は、(実際のチャートデータである)の平均を示し、2行目はしていない数である2つのラインのラベルを与えて全体のコードがありますデータはまったくありません。

List<double> yValues = new List<double>(); 
List<string> xValues = new List<string>(); 
List<int> zValues = new List<int>(); 

// First and Last columns do not contain chartable data 
for (int i = 1; i < dtResults.Columns.Count - 1; i++) { 
    double d; 
    if (double.TryParse(dtResults.Rows[1][i].ToString(), out d)) 
     yValues.Add(d == 0 ? double.NaN : d); 
    else 
     yValues.Add(double.NaN); 
} // foreach of the Average Time Values the chart 

// foreach of the column names 
for (int i = 1; i < dtResults.Columns.Count - 1; i++) 
    xValues.Add(dtResults.Columns[i].ColumnName); 

this.Chart.Titles["Title1"].Text = string.Format(
    "Average Request Time In Seconds On {0:MM/dd/yyyy} Between {1:HH} and {2:HH} In {3}", 
    this.DateRange.BeginDate.Value, 
    this.ucsTimePicker.BeginTime, 
    this.ucsTimePicker.EndTime, 
    this.SelectedSourceEnvironmentName 
); 
this.Chart.Series["Series1"].Points.DataBindXY(xValues, yValues); 

/// This loop will setup the point labels in a two line format where the first line displays 
/// the Average that the point is actually showing. The second line is data taken from the 
/// results table and is not a part of the chart at all but is useful information and is the 
/// Count of records in that time frame. 
/// In order for this to work, the Series property IsValueShownAsLabel needs to be NOT True. 
for (int i = 0; i < this.Chart.Series["Series1"].Points.Count; i++) { 
    int n = 0; 
    int.TryParse(dtResults.Rows[0][i + 1].ToString(), out n); 

    this.Chart.Series["Series1"].Points[i].Label = string.Format("Avg: #VALY{{0.000}}\nCount: {0}", n); 
} // foreach of the Count of Request within the Hour values 

this.Chart.Series["Series1"].ChartType = SeriesChartType.Line; 
this.Chart.Series["Series1"]["ShowMarkerLines"] = "true"; 
this.Chart.ChartAreas["ChartArea1"].AxisX.IsMarginVisible = true; 
this.Chart.ChartAreas["ChartArea1"].AxisX.Title = "Hours of the Day"; 
this.Chart.ChartAreas["ChartArea1"].AxisY.Title = "Time in Seconds"; 

// Handle styling when there is a Zero or missing value 
this.Chart.Series["Series1"].EmptyPointStyle.Color = Color.Red; 
this.Chart.Series["Series1"].EmptyPointStyle.BorderWidth = 3; 
this.Chart.Series["Series1"].EmptyPointStyle.BorderDashStyle = ChartDashStyle.Dash; 
this.Chart.Series["Series1"].EmptyPointStyle.MarkerStyle = MarkerStyle.Diamond; 
this.Chart.Series["Series1"].EmptyPointStyle.MarkerColor = Color.Red; 
this.Chart.Series["Series1"].EmptyPointStyle.MarkerSize = 8; 
this.Chart.Series["Series1"].EmptyPointStyle.MarkerBorderColor = Color.Black; 
this.Chart.Series["Series1"]["EmptyPointValue"] = "Zero"; 
関連する問題