2013-10-02 6 views
5

Ich habe ein Balkendiagramm mit der Anzahl der Personen. Wenn es nur ein paar Leute gibt, zeigt die Y-Achse Werte: 0,5, 1, 1,5 usw. ... Es sieht irgendwie albern aus.Ganzzahlen nur in AxisY-Label anzeigen?

  • kann ich das Intervall auf 1 (AxisY.LabelStyle.Interval = 1) außer Kraft setzen, aber wenn es 100 Leute ist es nicht funktioniert
  • ich die AxisY.Maximum = 10 einstellen kann, aber das funktioniert nicht mit 100 Personen
  • ich kann so eingestellt AxisY.LabelStyle.Format = {#}, aber das zeigt [1,1,2,2], wie es Runden jedes Etikett

ich weiß, ich eine der ersten beiden Optionen dyn nutzen könnte amically nach Inhalt, aber fragte sich, ob es einen automatischen Weg gibt, die Etiketten "nur ganze Zahlen" zu machen?

+0

Ich habe auch dieses Problem, gute Frage. –

+0

Was benötigt wird, ist eine MinimumInterval-Eigenschaft, aber es scheint so etwas nicht zu geben. – Rakhitha

Antwort

0

Sie Skala Pause sowohl kleine als auch große Zahlen auf der gleichen Achse zu zeigen, verwenden können:

// 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; 

Dieses Codebeispiel gerade aus the mschart samples gezogen wird, welche ein Muss herunterladen, wenn Sie mit der Arbeit Diagrammsteuerelemente.

+0

Das ist nicht was benötigt wird. Problem ist, dass es keine MinimumInterval-Eigenschaft gibt. Idealerweise ist es erforderlich, das Mindestintervall auf 1 zu setzen, damit die automatische Label-/Tick-/Rastergenerierung niemals Bruchwerte erzeugt. – Rakhitha

0

Das folgende Ereignis anpassen macht den Trick. Ich verwende im Grunde einen regulären Ausdruck, um Beschriftungen zu erkennen, die keine ganzen Zahlen sind, und sie dann zu entfernen. Wenn Sie das Intervall auf 1 setzen, können Sie Probleme bekommen, es sei denn, Sie stellen es zu einem späteren Zeitpunkt auf auto zurück.

Dieser Code löst nicht das Problem in meinem Fall als Ergebnis der Achse Intervall Eigenschaft ändern. Bitte schlagen Sie vor, ob jemand einen alternativen Vorschlag hat.

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; 

     } 
    }