2013-07-10 48 views
2

因此,我在.NET中使用了一个Chart控件,它使用Y轴的内部自动缩放算法。这一切都很好,但我现在试图获取Y轴的最大显示值作为一个双精度值存储用于进一步格式化。如何从自动缩放图表控件获取最大Y轴值

不幸的是,使用ChartControl.ChartAreas [0] .AxisY.Maximum将返回双倍的NaN,因为我使用自动缩放。

当使用自动调整轴时,可以获得Y轴的最大显示值吗?

编辑 在我执行操作是建立基本的格式为条形图,添加使用AddXY(数据点),最后试图让所显示的Y轴的最大值的顺序。即使在添加大量数据点后,使用ChartControl.ChartAreas [0] .AxisY.Maximum仍会返回NaN。

+0

我试图用自动缩放。如果我没有添加数据点,我会得到NaN,但是如果我的系列中有任何数据点,我会得到正确的值。你能否添加更多关于你如何设置你的控件的细节? –

+0

更新了一些关于我的图表控件的更多信息。你的方法仍然为我返回NaN。 – SRTie4k

回答

3

,直到显示图表它不计算最大的值,因此下面的代码显示楠:

public Form1() 
{ 
    InitializeComponent(); 
    this.chart1.Series.Clear(); 
    this.chart1.Series.Add("My Data"); 
    this.chart1.Series[0].Points.AddXY(1, 1); 
    this.chart1.Series[0].Points.AddXY(2, 2); 
    this.chart1.Series[0].Points.AddXY(3, 6); 
    MessageBox.Show(this.chart1.ChartAreas[0].AxisY.Maximum.ToString()); // returns NaN 
} 

但显示图表后会给出正确的值进行核对:

public Form1() 
{ 
    InitializeComponent(); 
    this.chart1.Series.Clear(); 
    this.chart1.Series.Add("My Data"); 
    this.chart1.Series[0].Points.AddXY(1, 1); 
    this.chart1.Series[0].Points.AddXY(2, 2); 
    this.chart1.Series[0].Points.AddXY(3, 6); 
} 

private void button1_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show(this.chart1.ChartAreas[0].AxisY.Maximum.ToString()); // returns 8 
} 

或者,您可以在设置数据后立即执行更新(但由于图表尚未显示,因此这不适用于表单构造函数):

private void button1_Click(object sender, EventArgs e) 
{ 
    this.chart1.Series.Clear(); 
    this.chart1.Series.Add("My Data"); 
    this.chart1.Series[0].Points.AddXY(1, 1); 
    this.chart1.Series[0].Points.AddXY(2, 2); 
    this.chart1.Series[0].Points.AddXY(3, 6); 
    this.chart1.Update(); 
    MessageBox.Show(this.chart1.ChartAreas[0].AxisY.Maximum.ToString()); // returns 8 
} 

这里的另一种方式做到这一点使用OnShown表事件和两个数据系列:

public Form1() 
{ 
    InitializeComponent(); 
    this.chart1.Series.Clear(); 
    this.chart1.Series.Add("My Data"); 
    this.chart1.Series[0].Points.AddXY(1, 1); 
    this.chart1.Series[0].Points.AddXY(2, 2); 
    this.chart1.Series[0].Points.AddXY(3, 6); 
    this.chart1.Series.Add("My Data2"); 
    this.chart1.Series[1].Points.AddXY(1, 1); 
    this.chart1.Series[1].Points.AddXY(2, 9); 
} 

protected override void OnShown(EventArgs e) 
{ 
    base.OnShown(e); 
    this.chart1.Update(); 
    MessageBox.Show(this.chart1.ChartAreas[0].AxisY.Maximum.ToString()); // returns 10 
} 
+0

'n'系列有什么? – Brad

+0

它返回所有系列中Y的最大计算值。 –

+0

OP没有真正说清楚,所以也许它并不重要,但现在这将返回只有系列[0]的最大值。 – Brad

5

呼叫chart.ChartAreas[0].RecalculateAxesScale();

然后chart1.ChartAreas[0].AxisY.MaximumMinimum将正确设置。

+0

这应该是公认的答案! – TaW

1

我需要在我的RecalculateAxesScale调用之前设置它们,因为我在显示同一图表控件上的另一个数据集时设置了它们。

chart.ChartAreas[0].AxisY.ScaleView.Size = double.NaN; 
    chart.ChartAreas[0].AxisY2.ScaleView.Size = double.NaN; 

编辑:为了澄清,我被重用相同的图表控制来显示取决于用户选择不同的数据集的图表。其中一个选项将ScaleView.Size设置为默认值(NaN)以外的值。所以我需要将它重新设置为默认值,以允许RecalculateAxesScale像它应该那样工作。

相关问题