Как сортировать (мин и Макс) Оси X и Y диаграммы в VB .NET 2010
Я читаю текстовый файл и строю точки на диаграмме. Файл содержит произвольно расположенные числа в Столбцах. Изначально программа получает минимальные и максимальные числа из столбцов в соответствии с моим требованием. После этого я помещаю их на диаграмму, но оси X и Y не сортируются. Ось показывает случайные числа, а не отсортированные значения (от min до max).
До сих пор то, что я пробовал, скопировано ниже.
Пожалуйста, научите меня, как изменить цвет и размер точек на графике, чтобы дифференцировать их, так как позже мне придется загружать несколько файлов.
Заранее спасибо !!!
Что я уже пробовал:
Dim Textfile As String Dim openDlg As New OpenFileDialog If openDlg.ShowDialog() = DialogResult.OK Then openDlg.Filter = "txt files (*.txt)| *.txt|All files (*.*)|*.*" openDlg.FilterIndex = 2 openDlg.RestoreDirectory = True Textfile = openDlg.FileName Dim filelines() As String = File.ReadAllLines(Textfile) Dim col1 As List(Of Long) = New List(Of Long)() Dim col2 As List(Of Long) = New List(Of Long)() Dim col3 As List(Of Double) = New List(Of Double)() Dim col4 As List(Of Double) = New List(Of Double)() Chart1.Series.Clear() Dim r As New Series r.Name = "Receivers" r.ChartType = SeriesChartType.Point Chart1.Series.Add(r) For Each fileline As String In filelines If fileline.StartsWith("R") Then fileline = fileline.Substring(1) Dim items() As String = fileline.Split(New Char() {CChar(vbTab), " "}, StringSplitOptions.RemoveEmptyEntries) Dim Linenum As Long Dim statnum As Double Dim Easting As Double Dim Northing As Double If Integer.TryParse(items(0), Linenum) Then col1.Add(Linenum) If Integer.TryParse(items(1), statnum) Then col2.Add(statnum) If Double.TryParse(items(2), Easting) Then col3.Add(Easting) If Double.TryParse(items(3), Northing) Then col4.Add(Northing) r.Points.AddXY(items(2), items(3)) Next 'sorting the columns to get min and max col1.Sort() col2.Sort() col3.Sort() col4.Sort() 'getting maximum and minimum value of 4 columns Me.Linemax.Text = col1.Item(col1.Count - 1).ToString() Me.Linemin.Text = col1.Item(0).ToString() Me.statemax.Text = col2.Item(col2.Count - 1).ToString() Me.statmin.Text = col2.Item(0).ToString() Me.Eastmax.Text = col3.Item(col3.Count - 1).ToString() Me.Eastmin.Text = col3.Item(0).ToString() Me.Northmax.Text = col4.Item(col4.Count - 1).ToString() Me.Northmin.Text = col4.Item(0).ToString() 'restricted Y axis as per the maximum and minimum values in the column Chart1.ChartAreas(0).AxisY.Minimum = col4.Item(0).ToString() Chart1.ChartAreas(0).AxisY.Maximum = col4.Item(col4.Count - 1).ToString() End If End Sub
Ralf Meier
Опубликуйте некоторые реальные значения из одного из ваших файлов ... В данный момент я понятия не имею, в чем ваша проблема ...
VB_Learner
Привет Ральф,
Пример данных примерно таков ..
194787.5 2667200.0
194812.5 2667200.0
195662.5 2667200.0
195687.5 2667200.0
201937.5 2667350.0
195737.5 2667200.0
195762.5 2667200.0
195787.5 2667200.0
196512.5 2667200.0
201837.5 2667350.0
198562.5 2667650.0
201887.5 2667350.0
201912.5 2667350.0
198187.5 2667500.0
201962.5 2667350.0
201987.5 2667350.0
202012.5 2667350.0
198412.5 2667650.0
Ralf Meier
Спасибо... теперь у меня есть другие вопросы ...
В вашем примере показан список с X - и Y-значениями - это будут два 1D-массива или один 2D-массив.
Таким образом, у вас будут все значения X в col1 и все значения Y в col2 ...?
В вашем фрагменте кода у вас есть 4 коллекции - что это значит ? Различные Кривые ?
Я предполагаю, что Xmin будет col1(0), а Xmax-col1(col1.Граф - 1) - то же, для г : Ymin будет столбец col2(0) и ymax будет столбец col2(столбец col2.Граф - 1) ... но вы назначаете col4 - что это значит ? Пожалуйста объяснить ...
VB_Learner
Да, есть 4 колонки.. Я только отправил пример 2 столбцов, которые я строю.. первые 2 столбца-это просто целые числа, которые я пока не хочу строить. Я только хочу, чтобы эти два столбца строились как точки ... Я сталкиваюсь только с проблемой сортировки оси X - Y диаграммы, чтобы начать с Min до Max .. надеюсь, вы поняли мою точку зрения..
Ralf Meier
ОК... но это то, что вы все уже делаете - так какая часть не работает до сих пор ?
VB_Learner
Я полагаю, что вы нанесли данные на график.. можете ли вы видеть, что оси X находятся в порядке возрастания?? .. мой вопрос связан с сортировкой осей X и Y, что они не сортируются от min до max ... пожалуйста, постройте график данных и посмотрите ... есть ли какой-нибудь способ прикрепить изображение jpg, чтобы прояснить мою проблему??
Ralf Meier
Мне кажется, теперь я понимаю - вот мое решение ...
VB_Learner
Спасибо за ваши усилия.. но, к сожалению, это решение будет работать только в том случае, если у меня есть ограниченные строки (10-20). Мой исходный файл содержит 5000 строк, и это решение точно не будет работать. Я скопировал все 4 столбца ниже. Пожалуйста, запустите мой оригинальный код, который я разместил в вопросе,и посмотрите на ось X. Вы обнаружите, что ось X диаграммы не отсортирована для представления графика. например, если график начинается с 0 - 10, интервал в моем графике показывает 0-1-2-5-6-4-7-9-8-3 и т. д.
R2072 2193 194787.5 2667200.0
R2072 2194 194812.5 2667200.0
R2072 2195 195662.5 2667200.0
R2072 2196 195687.5 2667200.0
R2072 2197 201937.5 2667350.0
R2072 2198 195737.5 2667200.0
R2072 2199 195762.5 2667200.0
R2072 2200 195787.5 2667200.0
R2072 2201 196512.5 2667200.0
R2072 2202 201837.5 2667350.0
R2072 2203 198562.5 2667650.0
R2072 2204 201887.5 2667350.0
R2072 2205 201912.5 2667350.0
R2072 2206 198187.5 2667500.0
R2072 2207 201962.5 2667350.0
R2072 2208 201987.5 2667350.0
R2072 2209 202012.5 2667350.0
Ralf Meier
В данный момент я ничего не понимаю.
В моем фрагменте кода я работал с прямым присвоением значений спискам, потому что у меня нет вашего файла.
В основном (для разнесенного кода) нет разницы, есть ли у вас 18 строк значений или 5000-вам нужно только больше времени для сортировки и назначения на диаграмму.
Ваша основная проблема в вашем коде (как я уже писал в своем решении) заключается в том, что вы всегда назначаете строки тем свойствам диаграммы, которые ожидают числовых значений-в этом разница между вашим кодом и моим - я назначаю двойные значения ... либо к масштабированию диаграммы, но также и к точкам диаграммы.
Но... что вы имеете в виду, говоря: "интервал на моем графике показывает 0-1-2-5-6-4-7-9-8-3 и т. д."? Я этого не понимаю.