2013-10-02 18 views
5

Ho un grafico a barre che rappresenta il numero di persone. Quando ci sono solo poche persone l'asse Y mostra valori: 0.5, 1, 1.5 ecc ... Sembra un po 'sciocco.Mostra solo numeri interi nell'etichetta AxisY?

  • posso ignorare l'intervallo di 1 (AxisY.LabelStyle.Interval = 1), ma se c'è 100 persone che non funziona
  • posso impostare la AxisY.Maximum = 10, ma che non funziona con 100 persone
  • posso impostare AxisY.LabelStyle.Format = {#}, ma che mostra [1,1,2,2] come esso colpi ciascuno etichette

mi rendo conto ho potuto utilizzare uno dei dyn prime due opzioni secondo il contenuto, ma chiedendosi se esiste un modo automatico per rendere le etichette "solo numeri interi"?

+0

Ho anche questo problema, buona domanda. –

+0

Ciò che è necessario è una proprietà MinimumInterval ma sembra che non ci sia nulla di simile. – Rakhitha

risposta

0

È possibile utilizzare pausa scala per mostrare entrambi i numeri piccoli e grandi sullo stesso asse:

// Enable scale breaks 
chart1.ChartAreas["Default"].AxisY.ScaleBreakStyle.Enabled = true; 
// Set the scale break type 
chart1.ChartAreas["Default"].AxisY.ScaleBreakStyle.BreakLineStyle = BreakLineStyle.Wave; 
// Set the spacing gap between the lines of the scale break (as a percentage of y-axis) 
chart1.ChartAreas["Default"].AxisY.ScaleBreakStyle.Spacing = 2; 
// Set the line width of the scale break 
chart1.ChartAreas["Default"].AxisY.ScaleBreakStyle.LineWidth = 2; 
// Set the color of the scale break 
chart1.ChartAreas["Default"].AxisY.ScaleBreakStyle.LineColor = Color.Red; 
// Show scale break if more than 25% of the chart is empty space 
chart1.ChartAreas["Default"].AxisY.ScaleBreakStyle.CollapsibleSpaceThreshold = 25; 
// If all data points are significantly far from zero, 
// the Chart will calculate the scale minimum value 
chart1.ChartAreas["Default"].AxisY.ScaleBreakStyle.IsStartedFromZero = AutoBool.Auto; 

Questo esempio di codice è tirato direttamente fuori the mschart samples, che sono un must download se si lavora con il controlli grafici.

+0

Questo non è ciò che è necessario. Il problema è che non esiste alcuna proprietà MinimumInterval. Idealmente, ciò che è necessario è la capacità di impostare l'intervallo minimo su 1 in modo che la generazione automatica di etichette/tick/griglia non generi mai valori frazionari. – Rakhitha

0

Seguire l'evento Personalizza fa il trucco. In pratica utilizzo un'espressione regolare per rilevare etichette che non sono numeri interi e quindi rimuoverle. Ma impostare l'intervallo su 1 può causare problemi a meno che non lo si riporti in automatico in un secondo momento.

Questo codice non risolve il problema nel mio caso a causa del dover modificare la proprietà intervallo asse. Si prega di suggerire se qualcuno ha un suggerimento alternativo.

private void Chart_Customize(object sender, EventArgs e) 
    { 
     List<CustomLabel> list = new List<CustomLabel>(); 
     System.Text.RegularExpressions.Regex r = new System.Text.RegularExpressions.Regex("^\\d+$"); 

     foreach (CustomLabel l in chart.ChartAreas[0].AxisY.CustomLabels) 
     { 
      if(!r.IsMatch(l.Text)) 
      { 
       list.Add(l); 
      } 
     } 

     if (list.Count > 0) 
     { 
      foreach (CustomLabel l in list) 
       chart.ChartAreas[0].AxisY.CustomLabels.Remove(l); 
      chart.ChartAreas[0].AxisY.Interval = 1; 

     } 
    }