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

问题描述 投票:0回答:3

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

我已经在使用具有内置 Y2 轴的组件一 (C1Chart) 图表,并且效果很好。

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

c# winforms charts
3个回答
14
投票

Microsoft 图表控件的示例环境包含多个 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;

    }

结果:
Multi Y axis off Multi Y axis off


1
投票

我认为您可以尝试多个 ChartArea,它允许您在同一个图表对象中排列多个绘图。

您可以将每个系列分配给自己的

ChartArea


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.