C# MSChart - charts area limits

前端 未结 2 882
长发绾君心
长发绾君心 2021-01-15 10:22

I have one Chart and three ChartArea that are aligned in view, zoom, cursor: this is my related previous post. All things works well except that the three ChartArea are not

相关标签:
2条回答
  • 2021-01-15 10:35

    Have you tried using the chart area alignment options? I would try something like:

    //define inner plot position of the chart areas
    dlChart.ChartAreas[0].InnerPlotPosition.Auto = true;
    dlChart.ChartAreas[1].InnerPlotPosition.Auto = true;
    dlChart.ChartAreas[2].InnerPlotPosition.Auto = true;
    
    //set our second chart area's alignments to match our first chart area
    dlChart.ChartAreas[1].AlignmentOrientation = AreaAlignmentOrientations.Vertical;
    dlChart.ChartAreas[1].AlignmentStyle = AreaAlignmentStyles.All;
    dlChart.ChartAreas[1].AlignWithChartArea = dlChart.ChartAreas[0].Name;
    
    //set our third chart area's alignments to match our first chart area
    dlChart.ChartAreas[2].AlignmentOrientation = AreaAlignmentOrientations.Vertical;
    dlChart.ChartAreas[2].AlignmentStyle = AreaAlignmentStyles.All;
    dlChart.ChartAreas[2].AlignWithChartArea = dlChart.ChartAreas[0].Name;
    
    0 讨论(0)
  • 2021-01-15 10:36

    You may want to take control of the size of the InnerPlotPosition.

    (But Baddack's solution is simpler and more flexible!)

    Here is an example:

    After setting up a Chart with three CharAreas, setting Minima and Maxima as well as adding one DataPoint to each we get this :

    Your issue is showing clearly.

    After setting the InnerPlotPosition to a fixed percentage it looks like this:

    Here is how to set the InnerPlotPosition size:

    ca1.InnerPlotPosition = new ElementPosition(10, 5, 80, 90);
    ca2.InnerPlotPosition = new ElementPosition(10, 5, 80, 90);
    ca3.InnerPlotPosition = new ElementPosition(10, 5, 80, 90);
    

    Note that both ChartArea.Position and ChartArea.InnerPlotPosition are called 'Position' but really are areas of percentages referring to the respective containers!

    So my example has a Left distance of 10%, a Top space of 5% and Width of 80% and Height of 90%. Which leaves 10% space at the Bottom and 5% at the Right. Note: All are referring to the ChartAreas not the ClientArea of the Chart! (Which are still at Auto, which maximizes the size.)

    This was my initial setup:

    ChartArea ca1 = chart.ChartAreas[0];
    ChartArea ca2 = chart.ChartAreas[1];
    ChartArea ca3 = chart.ChartAreas[2];
    
    
    Series s1 = chart.Series[0];
    Series s2 = chart.Series.Add("Series2");
    Series s3 = chart.Series.Add("Series3");
    
    s2.ChartArea = ca2.Name;
    s3.ChartArea = ca3.Name;
    
    s1.Points.AddXY(1, 7);
    s2.Points.AddXY(1, 777);
    s3.Points.AddXY(1, Math.PI);
    
    0 讨论(0)
提交回复
热议问题