我如何避免ZedGraph重新标记我的YAxis,除以1000?

时间:2011-08-13 22:21:38

标签: c# visual-studio zedgraph

我正在创建一个C#visual studio表单应用程序,它使用zedgraph绘制程序收集的数据,但是在绘制数据时我遇到了以下问题:

我的y轴值通常在100,000+范围内,因此当zed graph绘制该值时,它会用0,10,15,20,25之类的东西标记y轴标签,然后在y轴标签上将“(10 ^ 3)”附加到标题上并相应地绘制值。我想要做的是让它标记y轴的值为0,10,000,15,000,20,000等或0,10k,15k,20k等等,而不是调整y轴标题。

我尝试设置YAxis.Scale.MajorStep = double.Parse("10000");,但唯一的效果是在y轴上添加了更多的刻度线但没有其他效果。这是我的代码,用于绘制数据:

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

我希望这是有道理的。谢谢你的帮助。

2 个答案:

答案 0 :(得分:9)

ZedGraph正在尝试检测幅度并简化图表。您可以使用以下命令将其关闭:

myPane.YAxis.Scale.MagAuto = false;

这将导致y轴标签,如100000

如果要使用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);
}

答案 1 :(得分:0)

我遇到了类似的问题。所以应用你的方法它适用于应用程序,但我也想在PDF文件中打印出图形(使用MigraDoc),但它确实有效。

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