2011-08-13 13 views
5

मैं डेटा है कि कार्यक्रम एकत्र करता चार्ट बनाने के लिए zedgraph का उपयोग करता है एक सी # दृश्य स्टूडियो रूपों आवेदन बनाने रहा हूँ, लेकिन जब डेटा की साजिश रचने मैं निम्न समस्या में चल रहा हूँ:मैं कैसे ज़ेडग्राफ से बच सकता हूं, मेरे वाईएक्सिस को 1000 से विभाजित करता है?

मेरे y- अक्ष मूल्यों 100,000+ में आम तौर पर कर रहे हैं रेंज इसलिए जब ज़ेड ग्राफ़ वैल्यू प्लॉट करता है तो यह वाई-अक्ष लेबल को 0, 10, 15, 20, 25 जैसी चीजों के साथ लेबल करता है और फिर वाई-अक्ष लेबल पर यह शीर्षक ("10^3)" शीर्षक में जोड़ देगा और करेगा तदनुसार मूल्यों को साजिश करें। मैं क्या करना चाहता हूं क्या यह वाई-अक्ष को या तो 0, 10,000, 15,000, 20,000 आदि या 0, 10k, 15k, 20k जैसे मानों के साथ लेबल करता है और इस तरह यह वाई-अक्ष शीर्षक को समायोजित नहीं करता है।

मैंने YAxis.Scale.MajorStep = double.Parse("10000"); सेट करने का प्रयास किया लेकिन वाई-अक्ष पर अधिक टिक लाइनों का एक टन जोड़ने का एकमात्र प्रभाव है लेकिन कोई अन्य प्रभाव नहीं है। यहां मेरा कोड है जो डेटा को ग्राफ़ करता है:

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(); 
    } 

मुझे उम्मीद है कि यह समझ में आता है। सहायता के लिए धन्यवाद।

उत्तर

9

ज़ेडग्राफ ग्राफ का परिमाण और सरलता का पता लगाने का प्रयास कर रहा है। आप निम्नलिखित के साथ इस बंद कर सकते हैं:

myPane.YAxis.Scale.MagAuto = false; 

यह 100000 तरह y- अक्ष लेबल का परिणाम देगा।

आप 100,000 की तरह एक विभाजक अल्पविराम के साथ लेबल स्वरूपित करना चाहते हैं:

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

अंत में, यदि आप 100k दिखाने के लिए पसंद करते हैं, तो आप ScaleFormatEvent की सदस्यता और अपने खुद के प्रारूप लौटने के लिए, की तरह करने की आवश्यकता होगी यह:

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

मुझे इसी तरह की समस्या है। तो अपनी विधि को लागू करना यह एप्लिकेशन पर काम करता है लेकिन मैं ग्राफ को पीडीएफ फ़ाइल (माइग्राडोक का उपयोग करके) में प्रिंट करना चाहता हूं लेकिन यह काम करता है।

 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; 
     } 
संबंधित मुद्दे