Problem with X Axis Alignment While scroll The Chart Control

Question Problem with X Axis Alignment While scroll The Chart Control

  • 2012年3月9日 15:01
     
      コードあり

    I m working on data visualization Chart Control i m new in this . i have create one Chart Which Consist three chart area Chart Area1 ,SublineChart Area , . 

    IntersectlineChart Area In above Chart Red and Cyan Are subline series inside Subline chart area , While i Zoom this chart it working Fine but my problem is that whenever i scroll The the Chart All lines are moving perfectly accept  sublinelines series.I checked  The position and Size of all the chart area and Data points of subline series is same while zooming and scrolling Below are the code .                                                                

    //creating line by adding new series for each intercept.

    subLineSeries = new Series(SUBLINE_SERIES_NAME + i.ToString()); subLineSeries.ChartArea = "subLineChartArea"; subLineSeries.MarkerColor = Color.Transparent; subLineSeries.ChartType = SeriesChartType.Line; //Set the measure line color. subLineSeries.Color = measureLineColor; //If peak to peak then draw the measurelines connecting peaks at the peak Y index of the curve. peakMeasurelineDrawPoint = measurementLineInfoListForMeasureLine[i].IntersectPeakPointYIndex; if (peakMeasurelineDrawPoint >= 0) { //Set the value by mode (value / yAxisUnitPercent to display the values in percent mode). if (intensityGraphSettings.YAxisUnit == IntensityGraphSettings.YAxisUnitType.Percent) peakMeasurelineDrawPoint = (int)((double)peakMeasurelineDrawPoint / yAxisUnitPercent); subLineSeries.Points.AddXY(intensityGraph.Series[0].Points[measurementLineInfoListForMeasureLine[i].FirstSelectedEdgePointIndex].XValue, peakMeasurelineDrawPoint); subLineSeries.Points.AddXY(intensityGraph.Series[0].Points[measurementLineInfoListForMeasureLine[i].SecondSelectedEdgePointIndex].XValue, peakMeasurelineDrawPoint); } else { subLineSeries.Points.AddXY(intensityGraph.Series[0].Points[measurementLineInfoListForMeasureLine[i].FirstSelectedEdgePointIndex].XValue, centerLineNUD.Value); subLineSeries.Points.AddXY(intensityGraph.Series[0].Points[measurementLineInfoListForMeasureLine[i].SecondSelectedEdgePointIndex].XValue, centerLineNUD.Value); } intensityGraph.Series.Add(subLineSeries);


       This one for creates Subline Chart Area

                           //For sub line drawing.
                            subLineChartArea = new ChartArea("subLineChartArea");
                            subLineChartArea.Position = elementPosition;
                            subLineChartArea.InnerPlotPosition = elementPosition;
                            subLineChartArea.BackColor = Color.Transparent;
                            //X&Y properties.
                            subLineChartArea.AxisX.Minimum = (double)Math.Round(minXValue, 2);
                            if (Math.Round(maxXValue, 2) > 0)
                                subLineChartArea.AxisX.Maximum = (double)Math.Round(maxXValue, 2);
                            else
                                subLineChartArea.AxisX.Maximum = maxXValue;
                            subLineChartArea.AxisY.Interval = (double)Math.Round(intensityGraphSettings.MajorTickMarksYValue, 2);
                            subLineChartArea.AxisY.Maximum = (double)Math.Round(maxYValue, 2);
                            subLineChartArea.AxisY.Minimum = (double)Math.Round(minYValue, 2);
                            subLineChartArea.AxisY.TitleAlignment = StringAlignment.Center;
                            subLineChartArea.AxisY.TextOrientation = TextOrientation.Auto;
    
                            subLineChartArea.AxisX.Interval = (double)Math.Round(intensityGraphSettings.MajorTickMarksXValue, 2);
                            subLineChartArea.AxisX.Maximum = (double)Math.Round(maxXValue, 2);
                            subLineChartArea.AxisX.Minimum = (double)Math.Round(minXValue, 2);
    
                            subLineChartArea.AxisX.IntervalAutoMode = IntervalAutoMode.FixedCount;
                            subLineChartArea.AxisX.IntervalType = DateTimeIntervalType.Number;
                            subLineChartArea.AxisX.Interval = (double)Math.Round(intensityGraphSettings.MajorTickMarksXValue, 2);
                            subLineChartArea.AxisX.MinorTickMark.Enabled = true;
                            subLineChartArea.AxisX.MinorTickMark.Interval = (double)Math.Round(intensityGraphSettings.MinorTickMarksXValue, 2);
                            foreach (Axis axis in subLineChartArea.Axes)
                            {
                                axis.Enabled = AxisEnabled.False;
                            }
    
                            intensityGraph.ChartAreas.Add(subLineChartArea);                                                    

    Above the properties which we set to makes SublineLine chart Area

    Below are the Code While Zomming

    // Zoom Code intensityGraph.ChartAreas[0].AxisX.LabelStyle.Format = "N0"; intensityGraph.ChartAreas[0].AxisY.LabelStyle.Format = "N0"; //Change scrollbar colors intensityGraph.ChartAreas[0].AxisX.ScrollBar.BackColor = Color.LightGray; intensityGraph.ChartAreas[0].AxisX.ScrollBar.ButtonColor = Color.LightSteelBlue; intensityGraph.ChartAreas[0].AxisX.ScrollBar.LineColor = Color.DarkBlue; intensityGraph.ChartAreas[0].AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.All; intensityGraph.ChartAreas[0].AxisY.ScrollBar.BackColor = Color.LightGray; intensityGraph.ChartAreas[0].AxisY.ScrollBar.ButtonColor = Color.LightSteelBlue; intensityGraph.ChartAreas[0].AxisY.ScrollBar.LineColor = Color.DarkBlue; intensityGraph.ChartAreas[0].AxisY.ScrollBar.ButtonStyle = ScrollBarButtonStyles.All; intensityGraph.ChartAreas[0].AxisX.ScaleView.SmallScrollMinSize = 0; intensityGraph.ChartAreas[0].AxisX.ScaleView.MinSize = 0; if (XScaleSize == 0) { intensityGraph.ChartAreas[0].AxisX.ScaleView.Size = intensityGraph.ChartAreas[0].AxisX.ScaleView.ViewMaximum - intensityGraph.ChartAreas[0].AxisX.ScaleView.ViewMinimum; XScaleSize = intensityGraph.ChartAreas[0].AxisX.ScaleView.ViewMaximum - intensityGraph.ChartAreas[0].AxisX.ScaleView.ViewMinimum; XScaleMinSize = XScaleSize; //Maximium Zoom Size 1000% for X Axis XScaleMaxSize = XScaleSize / 10; XScaleSizeFirstvalue = XScaleSize / 1.25; } if (XScaleSize > XScaleMaxSize) { intensityGraph.ChartAreas[0].AxisX.ScaleView.Size = XScaleSize / 1.25; intensityGraph.ChartAreas[1].AxisX.ScaleView.Size = XScaleSize / 1.25; intensityGraph.ChartAreas[2].AxisX.ScaleView.Size = XScaleSize / 1.25; XScaleSize = XScaleSize / 1.25; } // Zoom In On the Basis of Y Axis if (YScaleSize == 0) { intensityGraph.ChartAreas[0].AxisY.ScaleView.Size = intensityGraph.ChartAreas[0].AxisY.ScaleView.ViewMaximum - intensityGraph.ChartAreas[0].AxisY.ScaleView.ViewMinimum; YScaleSize = intensityGraph.ChartAreas[0].AxisY.ScaleView.ViewMaximum - intensityGraph.ChartAreas[0].AxisY.ScaleView.ViewMinimum; YScaleMinSize = YScaleSize; //Maximum Zoom Size 1000% for Y Axis YScaleMaxSize = YScaleSize / 10; YScaleSizeFirstvalue = YScaleSize / 1.25; } if (YScaleSize > YScaleMaxSize) { intensityGraph.ChartAreas[0].AxisY.ScaleView.Size = YScaleSize / 1.25; intensityGraph.ChartAreas[1].AxisY.ScaleView.Size = YScaleSize / 1.25; intensityGraph.ChartAreas[2].AxisY.ScaleView.Size = YScaleSize / 1.25; YScaleSize = YScaleSize / 1.25; } RaiseIntensityGraphEvent(EventType.Intersect); DrawLastEdgeIntersectLinesOnGraph();

    When we Scroll the chart some time intersect line are scroll as per Other Lines How Can i achieve this.it is behaving like below Image

    Thanks In Advance

    Shashank Tyagi


    • 編集済み ShashankTyagi 2012年3月14日 7:42 Add some more code
    •