2015-02-03 9 views
1

하나의 차트에 2 Y 축을 생성하는 방법이 있습니까?MS 차트 여러 Y 축

같은 그래프에 2 축 이상을 추가하는 것은 불가능한 것처럼 보입니다.

실마리?

고마워요.

+0

이것은 도움이 될 것입니다. http://stackoverflow.com/questions/3458791/ms-chart-control-two-y-axis –

답변

1

당신은 ... 마이크로 소프트에서 mschart samples를 다운로드하고

차트 기능 봐야한다 -> 축 -> 다중 Y 축의 여기

enter image description here

그것의 코드 추출

using System.Windows.Forms.DataVisualization.Charting; 
... 

if(checkBoxUseMultipleYAxis.Checked) 
{ 
    // Set custom chart area position 
    Chart1.ChartAreas["Default"].Position = new ElementPosition(25,10,68,85); 
    Chart1.ChartAreas["Default"].InnerPlotPosition = new ElementPosition(10,0,90,90); 

    // Create extra Y axis for second and third series 
    CreateYAxis(Chart1, Chart1.ChartAreas["Default"], Chart1.Series["Series2"], 13, 8); 
    CreateYAxis(Chart1, Chart1.ChartAreas["Default"], Chart1.Series["Series3"], 22, 8); 
} 
else 
{ 
    // Set default chart areas 
    Chart1.Series["Series2"].ChartArea = "Default"; 
    Chart1.Series["Series3"].ChartArea = "Default"; 

    // Remove newly created series and chart areas 
    while(Chart1.Series.Count > 3) 
    { 
     Chart1.Series.RemoveAt(3); 
    } 
    while(Chart1.ChartAreas.Count > 1) 
    { 
     Chart1.ChartAreas.RemoveAt(1); 
    } 

    // Set default chart area position to Auto 
    Chart1.ChartAreas["Default"].Position.Auto = true; 
    Chart1.ChartAreas["Default"].InnerPlotPosition.Auto = true; 
} 

... 

/// <summary> 
/// Creates Y axis for the specified series. 
/// </summary> 
/// <param name="chart">Chart control.</param> 
/// <param name="area">Original chart area.</param> 
/// <param name="series">Series.</param> 
/// <param name="axisOffset">New Y axis offset in relative coordinates.</param> 
/// <param name="labelsSize">Extra space for new Y axis labels in relative coordinates.</param> 
public void CreateYAxis(Chart chart, ChartArea area, Series series, float axisOffset, float labelsSize) 
{ 
    // Create new chart area for original series 
    ChartArea areaSeries = chart.ChartAreas.Add("ChartArea_" + series.Name); 
    areaSeries.BackColor = Color.Transparent; 
    areaSeries.BorderColor = Color.Transparent; 
    areaSeries.Position.FromRectangleF(area.Position.ToRectangleF()); 
    areaSeries.InnerPlotPosition.FromRectangleF(area.InnerPlotPosition.ToRectangleF()); 
    areaSeries.AxisX.MajorGrid.Enabled = false; 
    areaSeries.AxisX.MajorTickMark.Enabled = false; 
    areaSeries.AxisX.LabelStyle.Enabled = false; 
    areaSeries.AxisY.MajorGrid.Enabled = false; 
    areaSeries.AxisY.MajorTickMark.Enabled = false; 
    areaSeries.AxisY.LabelStyle.Enabled = false; 
    areaSeries.AxisY.IsStartedFromZero = area.AxisY.IsStartedFromZero; 

    series.ChartArea = areaSeries.Name; 

    // Create new chart area for axis 
    ChartArea areaAxis = chart.ChartAreas.Add("AxisY_" + series.ChartArea); 
    areaAxis.BackColor = Color.Transparent; 
    areaAxis.BorderColor = Color.Transparent; 
    areaAxis.Position.FromRectangleF(chart.ChartAreas[series.ChartArea].Position.ToRectangleF()); 
    areaAxis.InnerPlotPosition.FromRectangleF(chart.ChartAreas[series.ChartArea].InnerPlotPosition.ToRectangleF()); 

    // Create a copy of specified series 
    Series seriesCopy = chart.Series.Add(series.Name + "_Copy"); 
    seriesCopy.ChartType = series.ChartType; 
    foreach(DataPoint point in series.Points) 
    { 
     seriesCopy.Points.AddXY(point.XValue, point.YValues[0]); 
    } 

    // Hide copied series 
    seriesCopy.IsVisibleInLegend = false; 
    seriesCopy.Color = Color.Transparent; 
    seriesCopy.BorderColor = Color.Transparent; 
    seriesCopy.ChartArea = areaAxis.Name; 

    // Disable grid lines & tickmarks 
    areaAxis.AxisX.LineWidth = 0; 
    areaAxis.AxisX.MajorGrid.Enabled = false; 
    areaAxis.AxisX.MajorTickMark.Enabled = false; 
    areaAxis.AxisX.LabelStyle.Enabled = false; 
    areaAxis.AxisY.MajorGrid.Enabled = false; 
    areaAxis.AxisY.IsStartedFromZero = area.AxisY.IsStartedFromZero; 

    // Adjust area position 
    areaAxis.Position.X -= axisOffset; 
    areaAxis.InnerPlotPosition.X += labelsSize; 
} 
...