Гистограмма с выпуском (Forms MC Chart)
Я хочу нарисовать 52 столбчатых ряда в столбчатой диаграмме, чтобы представить недели в году. Однако, как представляется, на графике есть проблема, как вы можете видеть на рисунке ниже:
У меня есть 2 серии, которые я рисую с меткой, значением х, значением у. Например:
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
}
};
Как я могу предотвратить эту форму?
1 ответ
Эффект является эффектом округления, возникающим при наличии такого большого количества баров.
Чтобы избежать этого, вы должны убедиться, что InnerPlotPosition.Height
Количество пикселей делится на 52.
Есть свойство сглаживания..:
chart.AntiAliasing = AntiAliasingStyles.All;
..но оно уже установлено All
по умолчанию.
Расчет ближайшего размера не так прост, как хотелось бы. Вы можете увидеть здесь для методов, которые рассчитывают InnerPlotPosition
и вы можете использовать ToRectangleF();
для принудительного расчета числа, пока график все еще использует автоматические значения.
Но так как эти числа выражены в процентах, а все остальные элементы, то есть заголовок, легенда и ось x с их надписями, все взвешивают, обратный расчет, чтобы найти работающее число, не только сложен, он также потерпит неудачу с каждым изменением размера Chart
, И, очевидно, при добавлении больше очков..
Если вы можете жить без изменения размеров, вы можете найти подходящий chart.Size
методом проб и ошибок, например, путем увеличения его нажатием кнопки: chart.Height += 1;
Но, по моему мнению, лучшее решение - это самостоятельно уменьшить ширину баров, например, так:
yourSeries.SetCustomProperty("PixelPointWidth", "3");
Эффект будет все еще происходить, но с большими промежутками это не будет столь заметно.