更改图表对象C#中Y轴的值

时间:2013-08-15 09:30:56

标签: c# .net winforms charts

大家早上好!

我设法在用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";
     }
 }

编辑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量表的值...

提前多多感谢!!!

1 个答案:

答案 0 :(得分:0)

我找到了一个问题的答案,除了这个问题之外,还有一个VB论坛:

可以使用函数AxisY.CustomLabels自定义比例。我在this website上看到了一个例子,我在下面的句子中将它改编为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)
                    );
            }

使用此代码,我仍然可以将秒作为我的系列的值而不是时间,并且我还解决了这样一个事实:如果时间大于一天,我可以显示日期或小时。< / p>