Обычно я бы придумывал менее хакерские решения, но, поскольку у меня нет времени на исследования сегодня вечером, у меня по крайней мере есть полурешения, которые могут служить вашей цели в зависимости от ваших требований, поэтому я дам вам кое-что для начала.
То, что вы испытываете, является поведением mschart по умолчанию, если вы не установили точку данных X для этого типа диаграммы.
Если вы никогда не устанавливаете x для точек в серии, каждая точка данных «x» будет определяться положением индекса точки данных в своей серии + 1. Вы используете три серии, каждая с одной точкой данных, поэтому в вашем примере все точки автоматически устанавливаются в значение x 1.
Исходя из этого, каждый вышеприведенный столбец будет сжат, чтобы быть отрисованным как можно ближе к их автоматически сгенерированному значению x, что в данном случае означает, что все точки равны x = 1.
Однако может быть лучший обходной путь, одним из решений этого будет присвоение значения x со смещением на основе количества рядов/точек данных, которые вы планируете использовать.
Если вы знаете, что у вас будет три серии, вы можете добавить уникальное смещение для каждой серии.
Например
chart1.Series["x"].Points.AddXY(chart1.Series["x"].Points.Count + 1 - 0.05, yValue);
chart1.Series["y"].Points.AddXY(chart1.Series["y"].Points.Count + 1, yValue);
chart1.Series["z"].Points.AddXY(chart1.Series["z"].Points.Count + 1 + 0.05, yValue);
ВНИМАНИЕ: Вы обнаружите интересные «ошибки»/функции, если не добавите «+ 1» к количеству точек данных для серии «y» выше. Без него первая точка данных ряда «y» будет равна нулю. Когда вы оставляете все на нуле, Microsoft Charting предполагает, что вы ничего не устанавливали, и использует поведение по умолчанию.
Другой хакерский обходной путь менее красив, если вы используете линии сетки, но он будет работать.
Используйте исходный код, но добавьте белые рамки! то есть добавить это в каждую серию (или, возможно, только в центральную серию)
chart1.Series["y"].BorderWidth = 2;
chart1.Series["y"].BorderColor = Color.White;
Примеры кода обходного пути, которые я привожу, адаптированы к приведенному выше примеру кода, который имеет три серии, каждая с одной точкой данных, но может быть адаптирован для большего количества серий и большего количества точек данных в серии, чтобы сделать его более динамичным. Дайте мне знать, если вам нужна помощь с такой задачей, и я постараюсь помочь вам.
Я вернусь и отредактирую этот ответ позже, если у меня будет время исследовать менее хакерский ответ в эти выходные. Удачи!
person
JHubbard80
schedule
20.08.2011