【问题标题】:Bar Chart with issue (Forms MC Chart)有问题的条形图(表格 MC 图表)
【发布时间】:2017-06-05 16:09:34
【问题描述】:

我想在条形图中绘制 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
            }
        };

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

【问题讨论】:

  • 您的 ChartType 是什么?对于条形图,代码不会运行,因为您不能添加超过 1 个 y 值。另外:永远不要将 x 值作为字符串添加!!
  • 我只是设置 ChartType = SeriesChartType.RangeBar,

标签: c# forms winforms charts stackedbarseries


【解决方案1】:

这种效果是由大量条形图产生的舍入效果。

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

有一个抗锯齿属性..:

chart.AntiAliasing = AntiAliasingStyles.All;

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

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

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

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

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

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

效果仍然会发生,但间隙越大,效果就不会那么明显了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多