Полоса прокрутки для линейного графика VB.NET - PullRequest
6 голосов
/ 15 марта 2019

Я создал линейный график в Visual Basic, чтобы показать, сколько калорий потребляет пользователь в день.Тем не менее, мой пользователь требует, чтобы я включил полосу прокрутки для прокрутки назад и вперед вдоль оси x, чтобы увидеть больше дней.

К сожалению, я никогда не делал ничего подобного раньше, и после просмотра Переполнения стека иГугл, я не вижу примеров того, как кто-то это делал.

Вот скриншот моего графика:

А вот код:

        Cursor.Current = Cursors.WaitCursor
        CalorieChartView = True
        BurntChartView = False
        NetChartView = False
        Dim Series As Series = CalorieChart.Series(0)
        'keeps track of if the chart is empty, starting as true
        Dim empty As Boolean = True
        'Clears the chart
        Series.Points.Clear()
        'Draws the chart in dark red
        Series.Color = Color.DarkRed
        'The legend text is changed
        Series.LegendText = "Calories Consumed"
        'For each of the past 8 days, a point is plotted with how many calories were eaten in that day
        For i = -7 To 0
            Series.Points.Add(User.GetCaloriesEaten(User.Username, Date.Now.AddDays(i)))
            Series.Points(7 + i).AxisLabel = Date.Now.AddDays(i).ToString("dd/MM/yyyy")
            'If any of the points are not 0
            If User.GetCaloriesEaten(User.Username, Date.Now.AddDays(i)) <> 0 Then
                'the chart is not empty
                empty = False
            End If
        Next

        HandleEmpty(empty)
        Cursor.Current = Cursors.Default

Буду признателен за любую помощь.

Ответы [ 2 ]

4 голосов
/ 22 марта 2019

Если я понимаю ваш вопрос, вы хотите добавить горизонтальную полосу прокрутки к вашему графику. Я сделал некоторую модификацию и новый код для вашего кода, как для макета данных. Пожалуйста, ознакомьтесь с кодом ниже. Вы можете получить идею, запустив этот код отдельно.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim blockSize As Integer = 10
    Cursor.Current = Cursors.WaitCursor
    CalorieChartView = True
    BurntChartView = False
    NetChartView = False

    CalorieChart.Series.Clear()
    Dim series = CalorieChart.Series.Add("My Series")
    series.ChartType = SeriesChartType.Line
    series.XValueType = ChartValueType.Int32
    'keeps track of if the chart is empty, starting as true
    Dim empty As Boolean = True
    'Clears the chart
    series.Points.Clear()
    'Draws the chart in dark red
    series.Color = Color.DarkRed
    'The legend text is changed
    series.LegendText = "Calories Consumed"
    'For each of the past 8 days, a point is plotted with how many calories were eaten in that day

    Dim sizeOfDayToDisplay As Int16 = 0

    For i = 0 To 100
        'Series.Points.Add(User.GetCaloriesEaten(User.Username, Date.Now.AddDays(i)))
        'Series.Points(7 + i).AxisLabel = Date.Now.AddDays(i).ToString("dd/MM/yyyy")
        ''If any of the points are not 0
        'If User.GetCaloriesEaten(User.Username, Date.Now.AddDays(i)) <> 0 Then
        '    'the chart is not empty
        '    empty = False
        'End If

         ' just for testing purpose.
        series.Points.Add(getRandumNumber())
        series.Points(i).AxisLabel = Date.Now.AddDays(i).ToString("dd/MM/yyyy")

        ' series.Points.AddXY(i, Date.Now.AddDays(i).ToString("dd/MM/yyyy"))
         sizeOfDayToDisplay += 1
    Next

     'most new code added is below here
    Dim chartArea = CalorieChart.ChartAreas(Series.ChartArea)
    chartArea.AxisX.Minimum = 0
    chartArea.AxisX.Maximum = sizeOfDayToDisplay
    chartArea.CursorX.AutoScroll = True
    chartArea.AxisX.ScaleView.Zoomable = True
    chartArea.AxisX.ScaleView.SizeType = DateTimeIntervalType.Number
    Dim position As Integer = 0
    Dim size As Integer = blockSize
    chartArea.AxisX.ScaleView.Zoom(position, size)
    chartArea.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll
    chartArea.AxisX.ScaleView.SmallScrollSize = blockSize
    'HandleEmpty(empty)
    'Cursor.Current = Cursors.Default
End Sub

Public Function getRandumNumber() As Int16
    Return CInt(Math.Floor((3500 - 1000 + 1) * Rnd())) + 1000
End Function

Here is the output graph

3 голосов
/ 22 марта 2019

Исходя из этого: Как прокрутить MS Chart вдоль оси x в vb.net , вы можете использовать:

Chart1.Series("LoadCell").Points.AddY(receivedData)
Chart1.ResetAutoValues()

If Chart1.Series("LoadCell").Points.Count >= 100 Then
     Chart1.Series("LoadCell").Points.RemoveAt(0)
End If

Он автоматически масштабирует ось Y, а также ограничивает ось X до 100 удаление первой записи, когда записи превышают 100.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...