2011-08-13 11 views
5

Estoy creando una forma visual studio aplicación de C# que utiliza ZedGraph para trazar los datos que recoge el programa, pero estoy corriendo en el problema siguiente al trazar los datos:¿Cómo puedo evitar que ZedGraph vuelva a etiquetar mi YAxis, dividiendo por 1000?

Mis valores del eje y son por lo general en el 100.000 + rango así que cuando el gráfico zed traza el valor que etiqueta las etiquetas del eje y con cosas como 0, 10, 15, 20, 25 y luego en la etiqueta del eje y, agregará "(10^3)" al título y lo trazar los valores en consecuencia. Lo que quiero hacer es etiquetar el eje y con valores como 0, 10,000, 15,000, 20,000, etc. o 0, 10k, 15k, 20k, etc. y no tener que ajustar el título del eje y.

Intenté configurar YAxis.Scale.MajorStep = double.Parse("10000"); pero el único efecto que tiene es agregar una tonelada más de líneas de tilde en el eje y pero ningún otro efecto. Aquí está mi código que grafica los datos:

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

Espero que esto tenga sentido. Gracias por la ayuda.

Respuesta

9

ZedGraph está intentando detectar la magnitud y simplificar el gráfico. Puede desactivar esta opción con la siguiente:

myPane.YAxis.Scale.MagAuto = false; 

Esto dará lugar a las etiquetas del eje y como 100000.

Si desea dar formato a la etiqueta con una coma como separador de 100,000:

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

Por último, si lo prefiere para mostrar 100k, tendrá que suscribirse a la ScaleFormatEvent y devuelva su propio formato, al igual esto:

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

Tengo un problema similar. Entonces, al aplicar tu método funciona en la aplicación, pero también quiero imprimir el gráfico en un archivo PDF (usando MigraDoc) pero funciona.

 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; 
     } 
Cuestiones relacionadas