2013-10-02 18 views
5

Mam wykres słupkowy przedstawiający liczbę osób. Kiedy jest tylko kilka osób, oś Y pokazuje wartości: 0,5, 1, 1,5 itd. Wygląda trochę głupio.Wyświetl liczby całkowite tylko w etykiecie AxisY?

  • mogę zastąpić interwał do 1 (AxisY.LabelStyle.Interval = 1) ale jeśli tam 100 osób, to nie działa
  • mogę ustawić AxisY.Maximum = 10, ale to nie działa ze 100 osób
  • mogę ustawić AxisY.LabelStyle.Format = {#}, ale to pokazuje [1,1,2,2] jak rund każda etykieta

Zdaję sobie sprawę, mogłem wykorzystać jedną z dwóch pierwszych opcji dyn amical zgodnie z treścią, ale zastanawiał się, czy istnieje automatyczny sposób, aby etykiety "tylko liczby całkowite"?

+0

Mam również ten problem, dobre pytanie. –

+0

Potrzebna jest właściwość MinimumInterval, ale wydaje się, że nie ma czegoś takiego. – Rakhitha

Odpowiedz

0

Można użyć przerwę skalę, aby pokazać zarówno małych jak i dużych liczb na tej samej osi:

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

Ten przykładowy kod jest wyciągana prosto z the mschart samples, które są koniecznością pobieranie jeśli pracujesz z kontrola wykresów.

+0

To nie jest to, co jest potrzebne. Problem polega na tym, że nie ma właściwości MinimumInterval. Idealnie wymagana jest możliwość ustawienia minimalnego interwału na 1, aby automatyczne generowanie etykiety/kleszczy/siatki nigdy nie generowało wartości ułamkowych. – Rakhitha

0

Po wydarzeniu Dostosuj załatwia sprawę. Zasadniczo używam wyrażenia regularnego, aby wykryć etykiety, które nie są liczbami całkowitymi, a następnie je usunąć. Ale Ustawienie interwału na 1 może spowodować problemy, chyba że później wrócisz do trybu automatycznego.

Ten kod nie rozwiązuje problemu w moim przypadku z powodu konieczności zmiany właściwości przedziału osi. Proszę zasugerować, jeśli ktoś ma alternatywną sugestię.

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; 

     } 
    }