我想在条形图中绘制52 Bar系列来表示一年中的周数。但是,图表似乎存在问题,如下图所示:
我有2个系列,我用标签,x值,y值绘制。 E.g:
chart1.Series["Data"].Points.AddXY("W1", 0, 168);
chart1.Series["Missing"].Points.AddXY("W1", 0, 0);
然而,即使我用相同的方法创建它们,条形系列之间似乎也存在差异(某些条纹较厚,有时甚至是smiller):
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
}
};
如何防止这种形式发生?
答案 0 :(得分:0)
效果是由于具有如此大量的条形而产生的舍入效果。
为避免这种情况,您必须确保InnerPlotPosition.Height
的像素数可被52整除。
有一个抗锯齿属性..:
chart.AntiAliasing = AntiAliasingStyles.All;
..但默认情况下它已设置为All
。
计算最接近的尺寸并不像人们希望的那么简单。对于计算InnerPlotPosition
的方法,您可以看到here,并且在图表仍在使用自动值时,您可以使用ToRectangleF();
强制执行计算数字。
但由于这些数字是百分比而其他元素,即标题,图例和带有标签的x轴都在称重,反转计算以找到一个有效的数字不仅很难,它也会失败每次调整Chart
的大小。并且,显然,当添加更多点..
如果您可以在不调整大小的情况下生活,则可以通过反复试验找到合适的chart.Size
,例如通过按钮点击增加它:chart.Height += 1;
但是,最好的解决方案是自己以受控方式减少条形宽度,也许是这样:
yourSeries.SetCustomProperty("PixelPointWidth", "3");
效果仍然很好,但如果差距较大,则不会那么明显。