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

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

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

大。

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

样本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; } 

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

我想你可以尝试多个ChartArea,它允许你在同一个图表对象中排列多个图。

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

就图表而言 , MS Chart控件几乎可以满足您的所有需求。 下载样本,运行它并转到图表特征>轴>多个Y轴。 我想你会找到你想要的东西!