You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET中从二维数组提取指定文件生成新列表用于XY图表

解决方案

一、现有代码核心问题

  • 重复读取CSV文件,既冗余又影响效率
  • 完全缺失针对testtesttest.D000条目的筛选逻辑
  • AxisX是图表渲染控件,无法直接帮你筛选数据——数据筛选必须先在业务逻辑层完成,再通过AxisX做标记

二、简化实现步骤

1. 一次性完成数据读取与筛选

直接读取原CSV文件,同时筛选出目标条目并生成所需的List(Of String),避免重复IO操作:

' 读取CSV并筛选testtesttest.D000条目
Dim csvLines = File.ReadAllLines("R:PathTooriginalFile.csv")
Dim targetDateList As New List(Of String)()
' 初始化二维数组(需根据CSV实际行列数调整,示例假设已知列数为50)
Dim myarray(csvLines.Length - 1, 49) As String

' 跳过表头(如果CSV有表头,从第2行开始遍历)
For x = 1 To csvLines.Length - 1
    Dim splits = csvLines(x).Split(","c)
    ' 假设testtesttest.D000在第6列(索引为5,需根据实际CSV结构调整)
    If splits(5) = "testtesttest.D000" Then
        ' 提取对应日期(假设日期在第4列,索引为3)加入目标列表
        targetDateList.Add(splits(3))
    End If
    ' 同步填充二维数组
    For y = 0 To splits.Length - 1
        myarray(x, y) = splits(y)
    Next
Next

2. 用AxisX标记目标位置

数据筛选完成后,通过AxisX的自定义网格线或标签标记目标条目:

' 图表基础配置
ChartName.Titles.Add("Name Of Chart")
ChartName.ChartAreas.Clear()
Dim chartArea = ChartName.ChartAreas.Add("Default")
With chartArea
    .AxisX.Title = "Date"
    .AxisY.Title = "Counts"
    .AxisX.MajorGrid.LineColor = Color.Red
    .AxisY.MajorGrid.LineColor = Color.Orange
    .AxisY.IsLogarithmic = True
End With

' 配置系列样式
ChartName.Series.Clear()
Dim cr1Series = ChartName.Series.Add("CR1")
cr1Series.Color = Color.DarkTurquoise
cr1Series.BorderDashStyle = DataVisualization.Charting.ChartDashStyle.Dot
cr1Series.BorderWidth = 4
cr1Series.ChartType = DataVisualization.Charting.SeriesChartType.Point

' 绑定原始数据点
For i = 0 To GrossCR1Values.Count - 1
    Dim xVal = DateOfTheFileValues(i)
    Dim yVal = GrossCR1Values(i)
    If yVal = 0 Then yVal = 1
    cr1Series.Points.AddXY(xVal, yVal)
Next

' 在AxisX上标记目标条目位置
For Each targetDate In targetDateList
    Dim pointIndex = DateOfTheFileValues.IndexOf(targetDate)
    If pointIndex <> -1 Then
        ' 添加蓝色加粗自定义网格线
        Dim customGrid = New DataVisualization.Charting.GridLine()
        customGrid.LineColor = Color.Blue
        customGrid.LineWidth = 2
        customGrid.IntervalOffset = pointIndex
        chartArea.AxisX.MajorGrid.CustomGridLines.Add(customGrid)
        
        ' 可选:添加目标标签
        Dim customLabel = New DataVisualization.Charting.CustomLabel()
        customLabel.Text = "Target"
        customLabel.FromPosition = pointIndex - 0.5
        customLabel.ToPosition = pointIndex + 0.5
        chartArea.AxisX.CustomLabels.Add(customLabel)
    End If
Next

三、关键说明

  • AxisX只负责图表渲染,数据筛选必须提前完成,不要指望控件帮你处理业务逻辑
  • 代码中的列索引(比如splits(5)、splits(3))要严格对应你的CSV实际结构,需自行调整
  • 优化后的代码去掉了重复读取文件的操作,性能更优

内容的提问来源于stack exchange,提问作者Nate

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 16:42:49