我正在创建一个使用zedgraph绘制程序所收集数据的C#Visual Studio Forms应用程序,但是在绘制数据时遇到了以下问题:
我的y轴值通常在100,000+范围内,因此当zed图形绘制该值时,它会在y轴标签上标注0、10、15、20、25之类的东西,然后在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;
这将导致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);
}
关于c# - 如何避免ZedGraph重新标记我的YAxis(除以1000)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7053673/