2013-04-04 88 views
5

Tôi có một khách hàng cần sử dụng biểu đồ có nhiều hơn 2 trục Y.C# Winforms - Tạo biểu đồ có nhiều trục Y (3 hoặc nhiều hơn)

Tôi đã sử dụng biểu đồ Thành phần một (C1Chart) có trục Y2 được xây dựng và hoạt động của nó

tuyệt vời.

Có ai biết điều khiển biểu đồ có thể hiển thị 3 hoặc nhiều trục Y trên biểu đồ không?

+1

Tôi đoán bạn có thể làm điều đó với MSChart bằng cách sử dụng nhiều loạt – V4Vendetta

+0

Bạn có thể tải về các plugin Crystal Reports cho Visual Studio, bạn có thể làm báo cáo với nó, với tất cả các loại bảng xếp hạng. – Max

+0

Tôi đã sử dụng [ZedGraph] (http://sourceforge.net/projects/zedgraph/) về dự án cao cấp của tôi ở trường đại học. Dường như nó hoạt động khá tốt. Các trang web chính đã không được cập nhật trong một thời gian, nhưng bạn có thể tìm thấy một số tài liệu [ở đây] (http://zedgraph.dariowiz.com/), một hướng dẫn ngắn [ở đây] (http://www.codeproject.com/Articles/5431/A-biểu đồ linh hoạt-thư viện-cho-NET), và một số mẫu [ở đây] (http://zedgraph.sourceforge.net/samples.html). – valverij

Trả lời

1

MS Chart control có hầu hết mọi thứ bạn cần bao giờ hết khi biểu đồ có liên quan. Tải xuống mẫu, chạy mẫu và chuyển đến Tính năng biểu đồ> Trục> Trục nhiều Y. Tôi nghĩ rằng bạn sẽ tìm thấy những gì bạn đang tìm kiếm!

5

Samples Environments for Microsoft Chart Controls chứa ví dụ về nhiều trục Y.
Một số mẩu mã:

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; 

    } 

Kết quả:
Multi Y axis off Multi Y axis off

+0

dữ liệu này được vẽ tương ứng với mỗi trục y phải không? – vivek

+0

@ vivek có, trong trường hợp cụ thể này, chúng tôi có 3 biểu đồ, 3 trục, mỗi dữ liệu biểu đồ tương ứng với trục y tương ứng – fat

Các vấn đề liên quan