所以我在.NET中使用Chart控件,它使用Y轴的内部自动缩放算法。这一切都很好,但我现在试图将Y轴的最大显示值存储为双精度,以用于进一步格式化。
不幸的是,使用ChartControl.ChartAreas [0] .AxisY.Maximum会返回双NaN,因为我使用的是自动缩放。
使用自动调节轴时,是否可以获得Y轴的最大显示值?
修改 我执行操作的顺序是为条形图建立基本格式,使用AddXY()添加数据点,然后最终尝试获取显示的Y轴的最大值。使用ChartControl.ChartAreas [0]。即使添加了大量数据点,.AxisY.Maximum仍会返回NaN。
答案 0 :(得分:5)
致电chart.ChartAreas[0].RecalculateAxesScale();
然后chart1.ChartAreas[0].AxisY.Maximum
和Minimum
将被正确设置。
答案 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像它应该的那样工作。