2

そのため、Y 軸の内部自動スケール アルゴリズムを使用している .NET で Chart コントロールを使用しています。これはすべてうまくいきますが、Y 軸の最大表示値を double として保存して、さらにフォーマットするために使用しようとしています。

残念ながら、オートスケールを使用しているため、ChartControl.ChartAreas[0].AxisY.Maximum を使用すると double 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 イベントと 2 つのデータ系列を使用してそれを行う別の方法を次に示します。

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 に答える