多个TeeChart图表控制沿底轴的对齐

时间:2017-02-22 07:25:27

标签: c# .net teechart

TeeChart's Multiple Chart Alignment along the Bottom X-Axis Issue

目前,我们使用TeeChart的图表控件(.net / c#)进行同步问题。在附带的屏幕截图中显示的示例中,我们有两个图表控件,其右纵轴完美同步。顶部图表包含面积图,底部图表包含体积图表。在特定时间间隔在两个图表上绘制垂直线时,我们发现在两个具有相同值的图表中绘制的垂直线不会同步。请注意,两个图表都使用相同的数据集绘制。

我们在同一个问题上做了一些研究,我们的观察结果表明这是由于TeeChart中使用的不同图表样式。但是根据我们客户的要求,我们需要在多个图表中同步这条垂直线。对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

下面的代码对齐两个系列的垂直线。我想你可以这样做:

  public Form1()
    {
        InitializeComponent();
        InitializeChart();
    }

    Steema.TeeChart.Axis axis1;
    DateTime dt; 
    private void InitializeChart()
    {
        tChart1 = new Steema.TeeChart.TChart();
        tChart1.Dock = DockStyle.Fill;
        this.Controls.Add(tChart1);
        tChart1.Aspect.View3D = false;
        axis1 = new Steema.TeeChart.Axis();
        tChart1.Axes.Custom.Add(axis1);
        axis1.Horizontal = false;

        tChart1.Axes.Right.StartPosition = 0;
        tChart1.Axes.Right.EndPosition = 50;

        axis1.StartPosition = 51;
        axis1.EndPosition = 100;

        axis1.OtherSide = true;
        axis1.AxisPen.Visible = false;
        dt = DateTime.Now;
        tChart1.Axes.Bottom.Labels.DateTimeFormat = "dd/MM";
        tChart1.Axes.Bottom.Labels.Style = Steema.TeeChart.AxisLabelStyle.Value;
        InitializeSeries();
        tChart1.Draw();

        tChart1.AfterDraw += TChart1_AfterDraw;
    }

    private void TChart1_AfterDraw(object sender, Steema.TeeChart.Drawing.Graphics3D g)
    {
       for (int i=0; i<tChart1[0].Count; i++)
        {
            Point point1, point2;
            point1= new Point(tChart1.Axes.Bottom.CalcPosValue(tChart1[0].XValues[i]),tChart1.Axes.Right.CalcYPosValue(tChart1[0].YValues[i]));
            point2= new Point(tChart1.Axes.Bottom.CalcPosValue(tChart1[0].XValues[i]), axis1.CalcYPosValue(tChart1[0].YValues[i]));
            g.Line(point1, point2);
        }
    }

    private void InitializeSeries()
    {
        for (int i=0; i<10; i++)
        {
            if (i==0)
            {
                new Steema.TeeChart.Styles.Area(tChart1.Chart);
                tChart1.Series[i].XValues.DateTime = true;
                (tChart1.Series[i] as Steema.TeeChart.Styles.Area).AreaLines.Visible = false;
                (tChart1.Series[i] as Steema.TeeChart.Styles.Area).Color = Color.BlueViolet;
                (tChart1.Series[i] as Steema.TeeChart.Styles.Area).Transparency = 20;
                Random rnd = new Random();
                for (int j=0; j<10; ++j)
                {
                    tChart1.Series[i].Add(dt, rnd.Next(100));
                    dt = dt.AddDays(1);
                }

                tChart1.Series[i].Marks.Visible = false;
                tChart1.Series[i].VertAxis = Steema.TeeChart.Styles.VerticalAxis.Right;
            }
            else if(i==1)
            {
                new Steema.TeeChart.Styles.Volume(tChart1.Chart);
                tChart1.Series[i].DataSource = tChart1.Series[i - 1];
                tChart1.Series[i].CustomVertAxis = axis1;
            }
        }          
    }

如果它最终适用,你能检查一下吗?

希望这会对你有所帮助。

提前致谢

问候!