2

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

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

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

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

4

3 回答 3

5

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

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

于 2013-08-28T15:00:19.830 回答
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
}
于 2013-07-10T21:01:46.750 回答
1

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

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

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

于 2015-08-04T20:39:59.067 回答