仅在Axis标签中显示整数?

时间:2013-10-02 14:24:18

标签: c# winforms mschart

我有一个描绘人数的条形图。当只有少数人时,Y轴显示值:0.5,1,1.5等...... 看起来有点傻。

  • 我可以将间隔覆盖为1(AxisY.LabelStyle.Interval = 1), 但是,如果有100个人则不起作用
  • 我可以设置 AxisY.Maximum = 10,但这不适用于100人
  • 我可以设置 AxisY.LabelStyle.Format = {#},但显示[1,1,2,2] 围绕每个标签

我意识到我可以根据内容动态地利用前两个选项中的任何一个,但是想知道是否有一种自动方式使标签“只有整数”?

2 个答案:

答案 0 :(得分:0)

您可以使用缩放中断在同一轴上显示小数字和大数字:

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

此代码示例直接从the mschart samples中提取,如果您使用图表控件,则必须下载。

答案 1 :(得分:0)

以下Customize事件可以解决问题。我基本上使用正则表达式来检测不是整数的标签然后删除它们。但是将间隔设置为1会导致您遇到麻烦,除非您稍后将其恢复为自动状态。

由于必须更改轴间隔属性,此代码无法解决我的问题。如果有人有其他建议,请建议。

    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;

        }
    }