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

本文关键字:获取 轴值 控件 缩放 | 更新日期: 2023-09-27 18:21:56

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

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

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

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

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

调用chart.ChartAreas[0].RecalculateAxesScale();

则CCD_ 2和CCD_。

在显示图表之前,它不会计算最大值,因此以下代码显示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
}

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

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

编辑:为了澄清,我重复使用了相同的图表控件来根据用户的选择显示不同数据集的图表。其中一个选择将ScaleView.Size设置为默认值(NaN)以外的值。所以我需要将其设置回默认值,以允许RecalculateAxesScale正常工作。