C#Winforms - 创建具有多个Y轴(3个或更多)的图表

use*_*704 8 c# charts winforms

我有一个客户端需要使用超过2个Y轴的图表.

我已经在使用具有内置Y2轴及其工作的Component One(C1Chart)图表

大.

有谁知道可以在图表上显示3个或更多Y轴的图表控件?

fat*_*fat 9

样本Microsoft Chart控件的环境包含多个Y轴的示例.
一些代码:

    private void checkBoxUseMultipleYAxis_CheckedChanged(object sender, System.EventArgs e)
    {
        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 are position to Auto
            Chart1.ChartAreas["Default"].Position.Auto = true;
            Chart1.ChartAreas["Default"].InnerPlotPosition.Auto = true;

        }
    }

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 drid 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;
        areaAxis.AxisY.LabelStyle.Font = area.AxisY.LabelStyle.Font;

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

    }
Run Code Online (Sandbox Code Playgroud)

结果:
多Y轴关闭 多Y轴关闭


Far*_*med 1

MS Chart 控件几乎拥有您所需的一切图表功能。下载示例,运行它并转到图表功能 > 轴 > 多个 Y 轴。我想你会找到你正在寻找的东西!