c# - 我怎样才能避免 ZedGraph 重新标记我的 YAxis,除以 1000?

标签 c# visual-studio zedgraph

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

我的 y 轴值通常在 100,000+ 范围内,所以当 zed graph 绘制值时,它用 0、10、15、20、25 之类的东西标记 y 轴标签,然后在 y 轴上标记它会将“(10^3)​​”附加到标题并相应地绘制值。我想要做的是让它用 0、10,000、15,000、20,000 等值或 0、10k、15k、20k 等值标记 y 轴,而不是调整 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();
    }

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

最佳答案

ZedGraph 正在尝试检测幅度并简化图表。您可以通过以下方式关闭此功能:

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

关于c# - 我怎样才能避免 ZedGraph 重新标记我的 YAxis,除以 1000?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053673/

相关文章:

visual-studio - 我应该使用什么开发工具在 F# 中编码?

c# - CA1701/自定义词典

c# - ZedGraph 条形宽度

c# - 将预先存在的跟踪类与 CurveList 一起使用

zedgraph - 如何绘制基于 Y2 轴的第二条曲线,而第一条曲线基于 Y 轴?

C# 线程安全的 getter 性能差异

c# - 如何正确编写异步 XUnit 测试?

C# - 如何从 Collection View 中获取不同的项目

.net - 找不到文件或程序集System.ServiceModel.DomainServices.Client.Web

c# - 为什么我不能只写一个没有 catch 或 finally 的 try?