2011-08-13 23 views
5

Tôi đang tạo một ứng dụng biểu mẫu studio C# trực quan sử dụng zedgraph để biểu đồ dữ liệu mà chương trình thu thập nhưng tôi đang gặp phải vấn đề sau khi vẽ sơ đồ dữ liệu:Làm cách nào để tránh ZedGraph thay đổi YAxis của tôi, chia cho 1000?

Giá trị trục y thường ở mức 100.000+ phạm vi như vậy khi đồ thị zed vẽ giá trị nó nhãn các nhãn trục y với các công cụ như 0, 10, 15, 20, 25 và sau đó trên nhãn trục y, nó sẽ nối thêm "(10^3)" vào tiêu đề và sẽ vẽ các giá trị cho phù hợp. Điều tôi muốn làm là gắn nhãn trục y với các giá trị như 0, 10.000, 15.000, 20.000 v.v. hoặc 0, 10k, 15k, 20k, v.v. và không điều chỉnh tiêu đề trục y.

Tôi đã cố gắng thiết lập YAxis.Scale.MajorStep = double.Parse("10000"); nhưng hiệu ứng duy nhất là thêm một tấn nhiều dòng đánh dấu trên trục y nhưng không có hiệu ứng nào khác. Đây là mã của tôi để vẽ đồ thị dữ liệu:

private void createGraph() 
    { 
     GraphPane myPane = zdc_graph.GraphPane; 
     myPane.CurveList.Clear(); 
     myPane.GraphObjList.Clear(); 

     myPane.Title.Text = this.monitoredHost.hostName + "\nWorkState[" + 
          this.monitoredHost.currentWorkState + "]"; 
     myPane.XAxis.Title.Text = ""; 

     myPane.YAxis.Title.Text = "OPS Per Second"; 
     myPane.YAxis.Scale.FontSpec.FontColor = Color.Blue; 
     myPane.YAxis.Title.FontSpec.FontColor = Color.Blue; 
     myPane.YAxis.Scale.MaxAuto = true; 

     myPane.Y2Axis.Title.Text = "Reading"; 
     myPane.Y2Axis.IsVisible = true; 
     myPane.Y2Axis.Scale.FontSpec.FontColor = Color.Red; 
     myPane.Y2Axis.Title.FontSpec.FontColor = Color.Red; 

     myPane.XAxis.Type = AxisType.Date; 
     myPane.XAxis.Scale.Format = "T"; 
     myPane.XAxis.Scale.MajorUnit = DateUnit.Second; 
     myPane.YAxis.Scale.Min = 0; 
     myPane.YAxis.Scale.MajorStep = double.Parse("10000"); 
     myPane.Y2Axis.Scale.Min = 0; 

     LineItem kpiCurve = myPane.AddCurve("OPS Per Second", 
          this.monitoredHost.graphKpiList, 
          Color.Blue,SymbolType.Circle); 
     LineItem pwrCurve = myPane.AddCurve("Reading", 
          this.monitoredHost.graphPwrList, Color.Red, 
          SymbolType.Circle); 

     kpiCurve.Line.Width = 2.0F; 
     kpiCurve.Symbol.Size = 4.0F; 
     kpiCurve.Symbol.Fill = new Fill(Color.White); 

     pwrCurve.Line.Width = 2.0F; 
     pwrCurve.Symbol.Size = 4.0F; 
     pwrCurve.Symbol.Fill = new Fill(Color.White); 
     pwrCurve.IsY2Axis = true; 

     myPane.Chart.Fill = new Fill(Color.White, Color.FromArgb(255, 255, 210), -45F); 

     zdc_graph.AxisChange(); 
     zdc_graph.Refresh(); 
    } 

Tôi hy vọng điều này có ý nghĩa. Cảm ơn đã giúp đỡ.

Trả lời

9

ZedGraph đang cố gắng phát hiện cường độ và đơn giản hóa biểu đồ. Bạn có thể tắt tùy chọn này với các thông tin sau:

myPane.YAxis.Scale.MagAuto = false; 

Điều này sẽ dẫn đến các nhãn trục y như 100000.

Nếu bạn muốn định dạng nhãn với một dấu phẩy tách như 100,000:

myPane.YAxis.Scale.Format = "#,#"; 

Cuối cùng, nếu bạn muốn hiển thị 100k, bạn sẽ cần phải đăng ký với ScaleFormatEvent và trở về định dạng của riêng bạn, như này:

myPane.YAxis.ScaleFormatEvent += new Axis.ScaleFormatHandler(YAxis_ScaleFormatEvent); 

string YAxis_ScaleFormatEvent(GraphPane pane, Axis axis, double val, int index) 
{ 
    return String.Format("{0}k", val/1000); 
} 
0

Tôi gặp sự cố tương tự. Vì vậy, áp dụng phương pháp của bạn nó hoạt động trên ứng dụng nhưng tôi cũng muốn in ra các đồ thị trong một tập tin PDF (sử dụng MigraDoc) nhưng nó hoạt động.

 public Bitmap printGraphPane() 
     { 
     ZedGraphControl graph = new ZedGraphControl(); 
     GraphPane newGP = myPane.GraphPane; 
     //newGP.YAxis.Scale.Mag = 0; 
     //newGP.YAxis.Scale.Format = "#"; 
     //newGP.YAxis.ScaleFormatEvent += new Axis.ScaleFormatHandler(YAxis_ScaleFormatEvent); 

     Bitmap bit = new Bitmap(newGraph.Width, newGraph.Height); 
     newGraph.ClientSize = bit.Size; 
     newGraph.DrawToBitmap(bit, new Rectangle(0, 0, newGraph.Width, newGraph.Height)); 

     return bit; 
     } 
Các vấn đề liên quan