1

おはようございます!

C# で作成された Windows フォーム プログラムでグラフ オブジェクトを処理することができました。ここで問題が発生しました。チャートに表示される YAxis スケールを制御したいのです。使用時間のグラフを作成する必要があり、hh:mm:ss の形式で YAxis スケールを表現したいと考えています。それは可能ですか?どうすればこれを達成できますか?

よろしくお願いします!

編集1 :これは、チャートを作成するコードです:

for (m = 0; m < mySeriesValues.Length; m++)
 {
     for (i = myFields.Count + 1; i < myAux.Columns.Count; i++)
     {
         Series mySerie = new Series();
         CustomLabel myItemLabel = new CustomLabel();

         mySerie.Name = mySeriesValues[m] + " - " + myAux.Columns[i].ColumnName;
         mySerie.XValueMember = myAux.Columns[0].ColumnName;
         mySerie.YValueMembers = myAux.Columns[i].ColumnName;
         for (j = 0; j < myAux.Rows.Count; j++)
         {
             nameValue = "";
             for (n = 1; n < myFields.Count + 1; n++) 
             {
                 if (n == 1) { nameValue += myAux.Rows[j][n].ToString(); }
                 else { nameValue += " - " + myAux.Rows[j][n].ToString(); }
             }
             if (mySeriesValues[m].Equals(nameValue))
             {
                 auxStringValue = myAux.Rows[j][i].ToString();
                 auxValue = Convert.ToDecimal(myAux.Rows[j][i].ToString());
                 resultTime = TimeSpan.FromSeconds((double)auxValue);
                 myLabel = String.Format("{0:D2}h:{1:D2}m:{2:D2}s", resultTime.Hours, resultTime.Minutes, resultTime.Seconds);
                 myItemLabel.Text = myLabel;
                 mySerie.Points.Add((double)auxValue).Label = myLabel;
                 this.chartReport.ChartAreas[0].AxisY.LabelStyle.Tag = myLabel;
             }
         }
         this.chartReport.Series.Add(mySerie);
         this.chartReport.Series[m]["PointWidth"] = "1";
     }
 }

EDIT 2:必要なものをほとんど手に入れました。私はこの文を使いました:

this.chartReport.ChartAreas[0].AxisY.LabelStyle.Format = String.Format("{0:D2}h:{1:D2}m:{2:D2}s", resultTime.Hours, resultTime.Minutes, resultTime.Seconds);

ただし、それは私の秒の値に対するマスクであるため、500000 秒がある場合、それらは 50:00:00 に変換され、秒を時間/分/秒に変換する必要がありますが、できます。 YAxis スケールの値を取得します...

よろしくお願いします!!!

4

1 に答える 1

0

私は自分の質問に対する答えを見つけました。それは、これとは別の VB フォーラムにありました。

関数を使用してスケールをカスタマイズすることができますAxisY.CustomLabelsこの Web サイトで例を見て、次の文でそれを C# に適応させました。

double valueMinimum = this.chartReport.ChartAreas[0].AxisY.Minimum; 
double valueMaximum = this.chartReport.ChartAreas[0].AxisY.Maximum; 
double labelInterval = this.chartReport.ChartAreas[0].AxisY.LabelStyle.Interval;

for (double increment = valueMinimum; increment <= valueMaximum; increment += labelInterval)
            {
                TimeSpan ts = TimeSpan.FromSeconds(increment);
                chartReport.ChartAreas[0].AxisY.CustomLabels.Add(
                    increment - labelInterval / 2, 
                    increment + labelInterval / 2, String.Format ("{0}h:{1}m:{2}s",
                    ts.Days * 24 + ts.Hours, ts.Minutes, ts.Seconds)
                    );
            }

このコードを使用すると、時間ではなく秒を値としてシリーズに導入できます。また、時間が 1 日より大きい場合は、日または時間を表示できるという事実も解決できます。

于 2013-08-19T07:19:09.500 に答える