WPF 根据Y、X的值生成一个走势曲线图Y、X为一组数据共有290万组数据详细代码
由于290万组数据量较大,为了保证性能和可视化效果,我们可以采用数据分组、抽样等方式进行优化。
以下是一个简单的示例代码,用于生成基于Y、X数据的走势曲线图:
XAML代码:
<Window x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="走势曲线图" Height="500" Width="800">
<Grid>
<Canvas x:Name="canvas" Background="White" Margin="10">
<Path x:Name="path" Stroke="Blue" StrokeThickness="2"/>
</Canvas>
</Grid>
</Window>
C#代码:
public partial class MainWindow : Window
{
private const int MaxDataCount = 10000; // 最大数据点数
private const int SampleInterval = 10; // 抽样间隔
private List<Point> data; // 原始数据
private List<Point> sampledData; // 抽样后的数据
public MainWindow()
{
InitializeComponent();
// 生成随机数据,实际应用中应从外部数据源获取
Random rand = new Random();
data = new List<Point>();
for (int i = 0; i < 2900000; i++)
{
data.Add(new Point(i, rand.NextDouble() * 100));
}
// 抽样
sampledData = new List<Point>();
int count = data.Count;
int step = count / MaxDataCount;
for (int i = 0; i < count; i += step)
{
sampledData.Add(data[i]);
}
// 绘制曲线
DrawLine(sampledData);
}
private void DrawLine(List<Point> points)
{
if (points.Count < 2)
{
return;
}
PathGeometry pathGeometry = new PathGeometry();
PathFigure pathFigure = new PathFigure();
pathFigure.StartPoint = points[0];
for (int i = 1; i < points.Count; i++)
{
if (i % SampleInterval == 0) // 抽样
{
pathFigure.Segments.Add(new LineSegment(points[i], true));
}
}
pathGeometry.Figures.Add(pathFigure);
path.Data = pathGeometry;
}
}
在实际应用中,我们还可以通过添加坐标轴、标注、交互等功能来进一步完善走势曲线图
原文地址: http://www.cveoy.top/t/topic/chO6 著作权归作者所有。请勿转载和采集!