Как добавить разрыв между сериями в MsChart? - PullRequest
0 голосов
/ 16 августа 2011

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

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;

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

Ответы [ 2 ]

3 голосов
/ 20 августа 2011

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

То, что вы испытываете, является поведением 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 предполагают, что вы ничего не установили, и используют поведение по умолчанию.

Еще один хакерский обходной путь менее хорош, если вы используете линии сетки, но он будет работать.

Используйте свой оригинальный код, но добавьте белые рамки! то есть добавить это к каждой серии (или, возможно, только к центральной серии)

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

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

Я вернусь и отредактирую этот ответ позже, если у меня будет время, чтобы найти менее хакерский ответ в эти выходные. Удачи!

0 голосов
/ 03 апреля 2017
chart1.Series["y"].BorderWidth = 2;
chart1.Series["y"].BorderColor = Color.Transparent;

прекрасно работает.

...