2012-01-09 8 views
19

Tengo un gráfico .NET que estoy rellenando en el tiempo de ejecución¿Cómo obligo a un gráfico a ajustar automáticamente el eje Y máximo?

El gráfico aparece dentro de un informe. Para cada banda en mi informe, puedo borrar todas las series y añadir de nuevo en el uso de código

  Series s = new Series(); 
      s.Font = new Font("Verdana", 8f);     

      int i = 0; 
      foreach (var month in line.Months) 
      { 
       DataPoint p = new DataPoint(); 

       p.XValue = i; 
       p.YValues = new Double[] { month.LineValue ?? 0 }; 
       s.Points.Add(p); 

       i++; 
      } 

Cuando poblar el diagrama de la segunda vez, las estancias máximas del eje Y en el año 2000, es decir, no está siendo recalculados

¿Cómo fuerzo el recálculo?

tengo ScaleBreakStyle habilitado en el eje Y

Si intento configurar IsLogarithmic true en el eje Y recibo una X en lugar de un gráfico

Estoy utilizando Visual Studio 2010 con el sistema. Windows.forms.DataVisualization.Charting.Chart

Paul

+0

Parece que la respuesta de Anton Kedrov debe ser la solución aceptada – Molomby

Respuesta

34

chart.ChartAreas[0].RecalculateAxesScale();

+3

También estaba tratando de establecer 'AxisY.Maximum = Double.NaN' (y lo mismo para AxisY2), pero no funciona para mí. –

+0

Esta respuesta funcionó para mí. Estaba habilitando/deshabilitando diferentes Series (todas las series están inicialmente deshabilitadas y controladas desde una lista) y noté que solo la primera Serie habilitada establecería el máximo para el eje y. – Doc

10

The docs decir el valor predeterminado para la propiedad Axis.Maximum es NaN (no un número), por lo usted debe ser capaz de vuelva a habilitar la funcionalidad de escalado automático volviendo a establecer el valor .

Algo como esto ...

chart.ChartAreas[0].AxisY.Maximum = Double.NaN; 

ACTUALIZACIÓN/CORRECCIÓN

respuesta de Anton es correcta; usted debe utilizar:

ChartArea.RecalculateAxesScale(); 

Según the RecalculateAxesScale() docs:

... a veces es necesario volver a calcular propiedades de la zona gráfica para que el gráfico es prestado correctamente. Por ejemplo, si se cambia un rango de eje, se deben recalcular las etiquetas para ese eje.

Aparentemente, ha estado disponible desde .NET 4.0.

+2

pensé e intenté lo mismo, pero no funcionó. La respuesta de Anton Kedrov funciona – yclkvnc

+0

@yclkvnc, ¿puedes publicar información sobre alguna versión? Creo que esta solución una vez funcionó, pero parece que la mayoría de la gente está teniendo mejor suerte con la respuesta de Anton en estos días. – Molomby

+0

lo siento, ni siquiera recuerdo haber usado .NET chart hace 5 años :) – yclkvnc

2

tiene que ejecutar esta secuencia:

AxisY.Maximum = Double.NaN; // sets the Maximum to NaN 
AxisY.Minimum = Double.NaN; // sets the Minimum to NaN 
enter code herechart.ChartAreas[0].RecalculateAxesScale(); // recalculates the Maximum and Minimum values, since they are set to NaN 
+1

Formatea el código y explica lo que hiciste – Prateek

Cuestiones relacionadas