如何从自动缩放图表控件获取最大Y轴值

时间:2013-07-10 19:45:16

标签: c# .net winforms visual-studio-2010

所以我在.NET中使用Chart控件,它使用Y轴的内部自动缩放算法。这一切都很好,但我现在试图将Y轴的最大显示值存储为双精度,以用于进一步格式化。

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

使用自动调节轴时,是否可以获得Y轴的最大显示值?

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

3 个答案:

答案 0 :(得分:5)

致电chart.ChartAreas[0].RecalculateAxesScale();

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

答案 1 :(得分:3)

在显示图表之前,它不计算最大值,因此以下代码显示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);
    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 Form事件和两个数据系列执行此操作的另一种方法:

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
}

答案 2 :(得分:1)

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

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

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