Как добавить разрыв между сериями в MsChart?

Я создал диаграмму со следующим кодом:

ChartAmalkerd.Titles[0].Text = "xxxx";
        ChartAmalkerd.Series.Add("x");
        ChartAmalkerd.Series["x"].ChartType = SeriesChartType.Column;
        ChartAmalkerd.Series["x"]["PointWidth"] = (0.5).ToString();
        ChartAmalkerd.Series["x"].Points.AddY(10);
        ChartAmalkerd.Series["x"].IsValueShownAsLabel = true;
        ChartAmalkerd.Series.Add("y");
        ChartAmalkerd.Series["y"].ChartType = SeriesChartType.Column;
        ChartAmalkerd.Series["y"].Points.AddY(20);
        ChartAmalkerd.Series["y"]["PointWidth"] = (0.5).ToString();
        ChartAmalkerd.Series["y"].IsValueShownAsLabel = true;
        ChartAmalkerd.Series.Add("y");
        ChartAmalkerd.Series["z"].ChartType = SeriesChartType.Column;
        ChartAmalkerd.Series["z"].Points.AddY(20);
        ChartAmalkerd.Series["z"]["PointWidth"] = (0.5).ToString();
        ChartAmalkerd.Series["z"].IsValueShownAsLabel = true;

но столбцы вместе и между столбцами нет промежутка. Как добавить пробел между столбцами?


person Raymond Morphy    schedule 16.08.2011    source источник


Ответы (2)


Обычно я бы придумывал менее хакерские решения, но, поскольку у меня нет времени на исследования сегодня вечером, у меня по крайней мере есть полурешения, которые могут служить вашей цели в зависимости от ваших требований, поэтому я дам вам кое-что для начала.

То, что вы испытываете, является поведением 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

chart1.Series["y"].BorderWidth = 2;
chart1.Series["y"].BorderColor = Color.Transparent;

работает хорошо.

person Janusz Waligóra    schedule 02.04.2017
comment
Если, как это кажется вероятным, это производное от другого ответа, было бы вежливо указать это с прямой ссылкой на него из ссылки «Поделиться» под этим ответом. - person Nathan Tuggy; 03.04.2017
comment
Я добавил комментарий о том, что это всего лишь расширение ответов, опубликованных выше, но оно было удалено из моего сообщения. Также я опубликовал это как ответ только потому, что тогда я не мог добавлять комментарии. Я выбрал прозрачный цвет из списка визуальных предложений MS, и это сработало. - person Janusz Waligóra; 07.04.2017
comment
Вы включили примечание о том, как не было ответом -- но это было так, поэтому я его убрал. Вы ничего не упомянули о том, что это расширение, или о том, что у вас должно быть. - person Nathan Tuggy; 07.04.2017
comment
Ну ты совсем не прав. Я сказал, что хотел добавить это как комментарий к ответу выше, но не мог из-за невозможности добавлять комментарии. - person Janusz Waligóra; 08.04.2017
comment
не удалось добавить комментарий слишком неоднозначно; это может и обычно подразумевает … к вопросу. - person Nathan Tuggy; 08.04.2017