偏移图表控件中的第二个系列,其中x轴是一个字符串

时间:2016-08-01 10:59:20

标签: c# winforms charts .net-4.0

如何在图表控件中偏移第二个系列,其中x轴是MS图表控件中的字符串。

我想将x轴保持为字符串。

在我的问题的下面示例中,我希望将Test2设置为从x轴位置“test 4”开始,但是目前它们都是从“test 1”开始,即使第一个x轴点位于“test 4”系列Test2?

我想我正在寻找一个偏移量,我可以说系列Test2从x轴点4开始,或者是轴的索引,我可以明确地添加点,但我看不出怎么做。

此外,但问题较少,如何在Y轴上启动TEST1系列?

这是我的困境的一个简单例子:

Series test1 = new Series("Test1");
Series test2 = new Series("Test2");
int x =1;
test1.XValueType = ChartValueType.Date;
for (int i = 1; i < 7; i++)
{
    test1.Points.AddXY("test" + x.ToString(), i);
    x++;
}

chart1.Series.Add(test1);
x = 4; // I would like to start plotting this series at "test 4"

for (int i = 5; i < 10; i++)
{

    test2.Points.AddXY("test" + x.ToString(), i);
    x++;
}

chart1.Series.Add(test2);

foreach (var series in chart1.Series)
{
    series.ChartType = SeriesChartType.Line;
    series.BorderWidth = 5;

}
chart1.ChartAreas[0].AxisX.LabelStyle.Angle = 45;
chart1.ChartAreas[0].AxisX.LabelStyle.Interval = 1;

目前显示如下: current output

1 个答案:

答案 0 :(得分:1)

一旦决定将x值添加为字符串,就无法正确使用系列中的数据。这是因为当字符串转换为double时它们会丢失,导致所有x值都为0d

所以你不能参考他们的价值观。相反,您只需插入必要数量的 DataPoints即可。因此,如果您想将系列偏移三个数据点,您可以写:

for (int i = 0; i < 3; i++)
{
   DataPoint dp0 = new DataPoint() 
                  {XValue = 0, IsEmpty = true, Color = Color.Transparent };
   test2.Points.Insert(0, dp0);
}

enter image description here

请注意,您可能希望控制Series.EmptyPointStyleEmpty DataPoints设置Series的显示方式。

另请注意,我在添加新内容之前已清除了默认series1chart1.Series.Clear();

更新:我刚才注意到你的第二个问题。

这里的问题是,通常的解决方案,非常简单和直接,不会起作用。这是:

  chart1.ChartAreas[0].AxisX.Minimum = 1;

如果只有您的值是数字,这将有效。但是当你将它们添加为字符串时,没有各种各样的东西,例如:Interval,IntervalOffset,Minimum,Maximum或zomme和range设置都可以。

因此,真正正确的解决方案是按您的意愿添加数据。这是一个例子:

    for (int i = 1; i < 7; i++)
    {

        int px = test1.Points.AddXY(x, i);
        test1.Points[px].AxisLabel = "test" + x;
        x++;
    }

这会创建所需的输出并仍保留DataPoints的x值:

enter image description here