更改图表对象C#中Y轴的值
本文关键字:对象 | 更新日期: 2023-09-27 18:27:57
大家早上好!
我设法在C#制作的Windows窗体程序中处理了一个图表对象。我现在有一个问题:我想控制图表中显示的Y轴比例。我必须用所用的时间制作一张图表,我想用hh:mm:ss的格式表示Y轴刻度。有可能做到吗?我怎样才能做到这一点?
提前感谢!
编辑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,我需要将秒转换为小时/分钟/秒,但我无法获得Y轴刻度的值。。。
提前感谢!!!
我在VB论坛上找到了我的问题的答案,除了这个:
可以使用函数AxisY.CustomLabels
自定义您的磅秤。我在这个网站上看到了一个例子,并在下面的句子中将其改编为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)
);
}
有了这个代码,我仍然可以将秒作为一个值引入我的系列,而不是时间,而且我还解决了这样一个事实,即如果时间大于一天,我可以显示天或小时。