我已经在我的WinForms应用程序中的Microsoft图表控件。
I have a Microsoft Chart Controls within my winforms app.
我目前发挥循环内的X和Y值。我也有过X轴的格式设置为
I currently play the X and y values within a loop. I also had the X-axis format set as
ChartAreas[0].AxisX.LabelStyle.Format={"00:00:00"}
这工作得很好作为一个时间格式,但是我发现一次,我的时间价值又超过60秒(即00:00:60),而不是规模向上移动到1分钟(即00:01:00)它进入61(即00:00:61)一直到99才去一分钟(00:00:99),然后(00:01:00)
This worked fine as a time format, however I noticed once my time values went above 60 seconds, (i.e. 00:00:60), rather than the scale moving up to 1 minute (i.e. 00:01:00) it goes to 61 (i.e. 00:00:61) right up to 99 before it goes to one minute (00:00:99) then (00:01:00)
有没有办法解决这个问题吗?
Is there a way to fix this please?
我怀疑 LabelStyle.Format
属性用于以类似的方式在的String.Format(mySringFormat,objToFormat)
。
因此,考虑到您的基础X对象类型是双
,它只是打印的冒号分隔的双(例如 4321
将○点43分21秒
)。
I suspect that LabelStyle.Format
property is used in a similar way as in string.Format(mySringFormat,objToFormat)
.
Hence, given that your underlying X objects type is double
, it will just print a colon-separated double (e.g. 4321
will be 00:43:21
).
AFAIK,没有一个简单的方法来打印双
值就像使用只是一个字符串格式的时间值。
AFAIK, there isn't an easy way to print a double
value like a time value using just a string format.
如果你可以改变code填充图,我建议你通过的DateTime
的为X值,然后你就可以使用自的DateTime
格式,如:
If you can change the code filling the chart, I suggest you to pass DateTime
's for the X values, and then you will be able to use custom DateTime
formatting, e.g.
HH:MM:SS
,或其他
编辑:
根据您的评论:
// create a base date at the beginning of the method that fills the chart.
// Today is just an example, you can use whatever you want
// as the date part is hidden using the format = "HH:mm:ss"
DateTime baseDate = DateTime.Today;
var x = baseDate.AddSeconds((double)value1);
var y = (double)value2;
series.Points.addXY(x, y);
编辑2:
下面是一个完整的例子,它应该很容易这样的逻辑应用到您的code:
Here's a complete example, it should be easy to apply this logic to your code:
private void PopulateChart()
{
int elements = 100;
// creates 100 random X points
Random r = new Random();
List<double> xValues = new List<double>();
double currentX = 0;
for (int i = 0; i < elements; i++)
{
xValues.Add(currentX);
currentX = currentX + r.Next(1, 100);
}
// creates 100 random Y values
List<double> yValues = new List<double>();
for (int i = 0; i < elements; i++)
{
yValues.Add(r.Next(0, 20));
}
// remove all previous series
chart1.Series.Clear();
var series = chart1.Series.Add("MySeries");
series.ChartType = SeriesChartType.Line;
series.XValueType = ChartValueType.Auto;
DateTime baseDate = DateTime.Today;
for (int i = 0; i < xValues.Count; i++)
{
var xDate = baseDate.AddSeconds(xValues[i]);
var yValue = yValues[i];
series.Points.AddXY(xDate, yValue);
}
// show an X label every 3 Minute
chart1.ChartAreas[0].AxisX.Interval = 3.0;
chart1.ChartAreas[0].AxisX.IntervalType = DateTimeIntervalType.Minutes;
chart1.ChartAreas[0].AxisX.LabelStyle.Format = "HH:mm:ss";
}