2012-01-09 11 views
19

Ho un grafico .NET che sto popolando in fase di esecuzioneCome posso forzare un grafico a regolare automaticamente l'asse Y massimo?

Il grafico viene visualizzato all'interno di un report. Per ogni banda nella mia relazione, ho chiaro tutte le serie e aggiungerle di nuovo in utilizzando il codice

  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++; 
      } 

Quando io popolo il grafico per la seconda volta, i soggiorni massimi asse Y nel 2000, vale a dire non è essere ricalcolati

Come si impone il ricalcolo?

ho ScaleBreakStyle abilitata l'asse Y

Se provo a impostare IsLogarithmic su true l'asse Y ricevo una X al posto di un grafico

Sto usando Visual Studio 2010 con il sistema. Windows.forms.DataVisualization.Charting.Chart

Paul

+0

Sembra che la risposta di Anton Kedrov dovrebbe essere la soluzione accettata – Molomby

risposta

34

chart.ChartAreas[0].RecalculateAxesScale();

+3

Stavo anche cercando di impostare "AxisY.Maximum = Double.NaN' (e lo stesso per AxisY2), ma non funziona per me. –

+0

Questa risposta ha funzionato per me. Stavo abilitando/disabilitando serie diverse (tutte le serie sono inizialmente disabilitate e controllate da una lista) e ho notato che solo la prima serie abilitata avrebbe impostato il massimo per l'asse y. – Doc

10

The docs dire il valore predefinito per la proprietà Axis.Maximum è NaN (non un numero), in modo da si dovrebbe essere in grado di riattivare la funzionalità di ridimensionamento automatico impostandola su tale valore .

qualcosa di simile ...

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

UPDATE/CORREZIONE

risposta di Anton è corretta; si dovrebbe utilizzare:

ChartArea.RecalculateAxesScale(); 

Secondo the RecalculateAxesScale() docs:

... a volte è necessario ricalcolare proprietà dell'area grafico in modo che il grafico è reso correttamente. Ad esempio, se viene modificato un intervallo di assi, le etichette per quell'asse devono essere ricalcolate.

Apparentemente, è disponibile da. NET 4.0.

+2

ho pensato e provato la stessa cosa, ma non ha funzionato. La risposta di Anton Kedrov funziona – yclkvnc

+0

@yclkvnc, puoi pubblicare alcune informazioni sulla versione? Penso che questa soluzione abbia funzionato una volta, ma sembra che molte persone stiano avendo più fortuna con la risposta di Anton in questi giorni. – Molomby

+0

scusate, non ricordo nemmeno di aver usato il grafico .NET 5 anni fa :) – yclkvnc

2

è necessario eseguire questa sequenza:

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

Si prega di formattare il codice e spiegare cosa hai fatto – Prateek

Problemi correlati