none
Como recalcular los valores maximos y minimos del Eje Y en un grafico MSCHART RRS feed

  • Pregunta

  • Hola.

    Trabajo con Visual Studio 2010 y tengo el siguiente problema. Necesito dar forma a un gráfico que me permita hacer lo siguiente. En la medida que haga Zoom + en el eje X me recalcule los valores maximos y mínimos del eje Y según los valores que me muestra dicho gráfico al hacer ese Zoom.

    Por ejemplo este es el aspecto del gráfico nada más cargarse:

    Vemos como los valores maximos y minimos del eje Y son un 10% superior e inferior al maximo y minimo de la serie temporal mostrada respectivamente.

    No obstante, si hago Zoom sobre un trozo de esta serie veo esto:

    Aparte de ver las rejillas verticales mas separadas vemos que el grafico mantiene iguales los valores maximos y minimos del eje Y. En mi caso necesito que estos valores se actualicen a la serie que tengo en cada momento en pantalla pero no se cómo darle forma.

    Os muestro el codigo que estoy usando ahora mismo:

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            Try
                Dim tbGrafico As New DataTable
                tbGrafico = cOpus.DameDatos("SELECT  dbo.DATA.Fecha as Date, " &
                     "CONVERT(DECIMAL(10,2),dbo.DATA.Open1) as Open1, CONVERT(DECIMAL(10,2),dbo.DATA.High) as High, " &
                     "CONVERT(DECIMAL(10,2),dbo.DATA.Low) AS Low,CONVERT(DECIMAL(10,2), dbo.DATA.Close1) AS Close1 " &
                     " FROM     dbo.Activos INNER JOIN " &
                     " dbo.DATA ON dbo.Activos.IdActivo = dbo.DATA.IdActivo " &
                     " WHERE  dbo.Activos.IdActivo = 4 AND dbo.DATA.Fecha>'01/01/2010'" &
                     " ORDER BY dbo.DATA.Fecha")
    
                Chart1.Series(0).ChartType = DataVisualization.Charting.SeriesChartType.Candlestick
    
                Me.Chart1.Series(0).BorderWidth = 4
    
                With (Chart1.ChartAreas(0))
                    .AxisX.Title = "FECHA"
                    .AxisY.Title = "DATOS"
                End With
    
                Chart1.ChartAreas(0).AxisY.IsStartedFromZero = False
    
                'Controla el zoom y la selección
                Chart1.ChartAreas(0).AxisX.ScaleView.Size = 15
                Chart1.ChartAreas(0).AxisX.ScaleView.Position = Chart1.ChartAreas(0).AxisX.ScaleView.ViewMaximum - 15 ' Obtiene o establece la posición de la escala de la vista
    
                Chart1.ChartAreas(0).CursorX.IsUserEnabled = True
                'para permitir la selección del rango de zoom
                Chart1.ChartAreas(0).CursorX.IsUserSelectionEnabled = True
                Chart1.ChartAreas(0).AxisX.ScaleView.Zoomable = True ' Obtiene o establece una bandera que indica si la interfaz de usuario de zoom está activado.
                Chart1.ChartAreas(0).AxisX.ScrollBar.IsPositionedInside = False
    
                Chart1.ChartAreas(0).AxisX.Interval = 1
                Chart1.ChartAreas(0).AxisX.LabelStyle.Angle = 80 'Inclinación del valor de fecha
    
                For i = 0 To tbGrafico.Rows.Count - 1
                    Chart1.Series(0).Points.AddXY(CDate(tbGrafico.Rows(i).Item(0).ToString), New Object() {tbGrafico.Rows(i).Item(2), tbGrafico.Rows(i).Item(3), tbGrafico.Rows(i).Item(1), tbGrafico.Rows(i).Item(4)})
                Next
            
                Chart1.ChartAreas(0).AxisY.Minimum = Chart1.ChartAreas(0).AxisY.ScaleView.ViewMinimum - Chart1.ChartAreas(0).AxisY.ScaleView.ViewMinimum * 0.1
    
            Catch ex As Exception
    
            End Try
    
        End Sub
    
        Private Sub btnMasZoom_Click(sender As System.Object, e As System.EventArgs) Handles btnMasZoom.Click
    
            Chart1.ChartAreas(0).AxisX.ScaleView.Position = Chart1.ChartAreas(0).CursorX.SelectionStart
            Chart1.ChartAreas(0).AxisX.ScaleView.Size = Chart1.ChartAreas(0).AxisX.ScaleView.Size / 2
    
            Chart1.ChartAreas(0).AxisY.Minimum = Chart1.ChartAreas(0).AxisY.ScaleView.ViewMinimum + Chart1.ChartAreas(0).AxisY.ScaleView.ViewMinimum * 0.1
    
        End Sub
    
        Private Sub btnMenosZoom_Click(sender As System.Object, e As System.EventArgs) Handles btnMenosZoom.Click
            'para disminuir el zoom
            Chart1.ChartAreas(0).AxisX.ScaleView.Size = Chart1.ChartAreas(0).AxisX.ScaleView.Size * 2
            If Chart1.ChartAreas(0).AxisX.ScaleView.Size > Chart1.Series(0).Points.Count Then
                Chart1.ChartAreas(0).AxisX.ScaleView.Size = Chart1.Series(0).Points.Count
            End If
            Chart1.ChartAreas(0).AxisY.Minimum = Chart1.ChartAreas(0).AxisY.ScaleView.ViewMinimum - Chart1.ChartAreas(0).AxisY.ScaleView.ViewMinimum * 0.1
        End Sub

    Gracias

    Angel

    domingo, 24 de enero de 2016 21:14

Respuestas

Todas las respuestas