0

我想在条形图中绘制 52 个条形系列来表示一年中的几周。但是,图表似乎存在问题,如下图所示:

在此处输入图像描述

我有 2 个系列,我用标签绘制,x 值,y 值。例如:

chart1.Series["Data"].Points.AddXY("W1", 0, 168);
chart1.Series["Missing"].Points.AddXY("W1", 0, 0);

然而,酒吧系列之间似乎存在差异(有时更厚有时更小),即使我用相同的方法创建它们:

  var series = new Series
        {
            Name = seriesName,
            ChartArea = chartAreaName,
            Color = color,
            ChartType = SeriesChartType.RangeBar,
            XValueType = ChartValueType.Auto,
            YValueType = ChartValueType.Auto,
            SmartLabelStyle = new SmartLabelStyle
            {
                AllowOutsidePlotArea = LabelOutsidePlotAreaStyle.Yes,
                MovingDirection = LabelAlignmentStyles.Right,
                IsMarkerOverlappingAllowed = false
            }
        };

我怎样才能防止这种形式发生?

4

1 回答 1

0

该效果是由于具有如此大量的条而产生的舍入效果。

为避免这种情况,您必须确保InnerPlotPosition.Height' 的像素数可被 52 整除。

有一个抗锯齿属性..:

chart.AntiAliasing = AntiAliasingStyles.All;

..但它已经All默认设置为。

计算最接近的尺寸并不像人们希望的那样简单。您可以在此处查看计算方法,InnerPlotPosition并且您可以ToRectangleF();在图表仍在使用自动值时强制计算数字。

但是由于这些数字是百分比,而其他元素,即标题、图例和带有标签的 x 轴都在权衡,因此逆向计算以找到一个有效的数字不仅很难,而且每次调整大小都会失败Chart. _ 而且,显然,当添加更多点时..

chart.Size如果您可以在不调整大小的情况下生活,您可以通过反复试验找到合适的,例如通过单击按钮来增加它:chart.Height += 1;

但是 imo 最好的解决方案是自己以可控的方式减小条的宽度,可能是这样的:

  yourSeries.SetCustomProperty("PixelPointWidth", "3");

效果仍然会发生,但如果差距较大,则不会那么明显。

于 2017-01-20T16:21:43.707 回答