我有一个描绘人数的条形图。当只有少数人时,Y轴显示值:0.5,1,1.5等...... 看起来有点傻。
AxisY.LabelStyle.Interval = 1
),
但是,如果有100个人则不起作用AxisY.Maximum = 10
,但这不适用于100人AxisY.LabelStyle.Format = {#}
,但显示[1,1,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;
}
}