我有一个简单的 CSV 日志文件,将其读入列表并在 LINQPad 中绘制图表非常容易,但我想更新格式和 x 轴上的刻度。
这是我的代码:
File.ReadAllLines(@"\\...\ModelTimes.csv")
.Skip(1)
.Select(line => line.Split(','))
.Select(data => new
{
CurrentTime = DateTime.Parse(data[0]),
ModelTime = DateTime.Parse(data[1]),
ModelAgeHours = Decimal.Parse(data[2]),
CutOff = 2
})
.Where(data => data.CurrentTime.Date == new DateTime(2021, 9, 24))
.Chart(data => data.CurrentTime)
.AddYSeries(data => data.ModelAgeHours, LINQPad.Util.SeriesType.Line, "Model Age")
.AddYSeries(data => data.CutOff, LINQPad.Util.SeriesType.Line, "2 Hours")
Run Code Online (Sandbox Code Playgroud)
随着输出:
正如你所看到的,我得到的只是日期,而不是 x 轴上的时间。有什么方法可以配置标签和刻度频率,例如:
2021-09-24 10:00每 2 小时 1 次刻度。
感谢Joe Albahari的评论,我已经让它正常工作了,并且我还自定义了数据点上的工具提示。
使用为.ToWindowsChart()您提供了一个System.Windows.Forms.DataVisualization.Charting.Chart可以从那里访问xAxis以进行自定义的功能。我还向该chart.GetToolTipText事件添加了一个处理程序,以设置自定义文本以显示 x 和 y 值。
var times = File.ReadAllLines(@"\\...\ModelTimes.csv")
.Skip(1)
.Select(line => line.Split(','))
.Select(data => new
{
CurrentTime = DateTime.Parse(data[0]),
ModelTime = DateTime.Parse(data[1]),
ModelAgeHours = Decimal.Parse(data[2]),
CutOff = 2
})
.Where(data => data.CurrentTime >= DateTime.Now.AddDays(-4)).OrderByDescending(data => data.CurrentTime);
var chart = times
.Chart(data => data.CurrentTime)
.AddYSeries(data => data.ModelAgeHours, LINQPad.Util.SeriesType.Line, "Model Age")
.AddYSeries(data => data.CutOff, LINQPad.Util.SeriesType.Line, "2 Hours")
.ToWindowsChart();
var xAxis = chart.ChartAreas[0].AxisX;
xAxis.IntervalType = DateTimeIntervalType.Hours;
xAxis.Interval = 4;
xAxis.LabelStyle.Format = "MMM dd HH:mm";
xAxis.LabelStyle.Angle = 90;
xAxis.MinorTickMark = new TickMark {
Enabled = true,
IntervalType = DateTimeIntervalType.Hours,
TickMarkStyle = TickMarkStyle.OutsideArea,
Interval = 2,
};
chart.GetToolTipText += (_, e) =>
{
if (e.HitTestResult.ChartElementType == ChartElementType.DataPoint)
{
var data = e.HitTestResult.Series.Points[e.HitTestResult.PointIndex];
e.Text = $"({DateTime.FromOADate(data.XValue):MMM dd HH:mm}, {data.YValues[0]:0.00})";
}
};
chart.Dump();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
716 次 |
| 最近记录: |