如何在MsChart中添加系列间的差距?

时间:2011-08-16 10:49:54

标签: asp.net 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;

但是列在一起,列之间没有任何间隙。 如何在列之间添加间隙?

2 个答案:

答案 0 :(得分:3)

我通常会提出较少的黑客解决方案,但由于我今晚没有时间研究 - 我至少有半解决方案可能会根据您的要求为您服务,所以我会给您一些开始的东西。

如果没有为此图表类型设置X数据点,则您遇到的是默认的mschart行为。

如果您从未为系列中的点设置x,则每个数据点“x”将由其系列中的数据点索引位置+ 1定义。您使用的是三个系列,每个系列都有一个数据点,因此在您的系列中例如,所有点都自动设置为x值。

基于此,上面的每一列都将被挤压成尽可能接近其自动生成的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);

注意:如果您没有为上面的系列“y”的数据点数添加“+ 1”,您将发现有趣的“错误”/功能。没有它,系列'y'的第一个数据点将为零。当您将事物保持为零时,微软图表将假设您没有设置任何内容并使用默认行为。

如果你使用网格线,另一个hacky解决方法就不那么漂亮了,但它会起作用。

使用原始代码,但添加白色边框! 即将其添加到每个系列(或者可能只是中心系列)

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

我引用的变通方法代码示例是针对上面的代码示例量身定制的,它具有三个系列,每个系列都有一个数据点,但可以针对每个系列更多系列和更多数据点进行调整,以使其更具动态性。如果您需要有关此类任务的帮助,请告诉我,我会尽力帮助您。

如果我本周末有时间研究一个不太讨厌的答案,我会稍后返回并编辑这个答案。祝你好运!

答案 1 :(得分:0)

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

效果很好。