c# – 根据几个系列的X值的一部分中的值,缩放图表的Y轴

前端之家收集整理的这篇文章主要介绍了c# – 根据几个系列的X值的一部分中的值,缩放图表的Y轴前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个这样的应用: @H_301_2@使用图表下方的文本框,用户可以设置图表的X轴的最小值和最大值.这是它的代码

  1. private void textBoxXaxisMin_TextChanged(object sender,EventArgs e)
  2. {
  3. double x;
  4. //checks if the input is a double and smaller than the max value
  5. //if (Double.TryParse(this.textBoxXaxisMin.Text,out x) && x < chart1.ChartAreas[0].AxisX.Maximum)
  6. if (Double.TryParse(this.textBoxXaxisMin.Text,out x))
  7. {
  8. this.textBoxXaxisMin.BackColor = Color.White;
  9. chart1.ChartAreas[0].AxisX.Minimum = Convert.ToDouble(this.textBoxXaxisMin.Text);
  10. //changeYScalaMin(chartCharacteristicCurvesThermoelemts,Convert.ToDouble(this.textBoxCharacteristicCurvesThermoelementXmin.Text),Convert.ToDouble(this.textBoxCharacteristicCurvesThermoelementXmax.Text));
  11.  
  12. //method to scale y axis
  13.  
  14. }
  15. else
  16. //if the textBox is not highlighted
  17. this.textBoxXaxisMin.BackColor = Color.Orange;
  18. //calls the Max Function to update the chart if the Max-value is now valid
  19.  
  20. double y;
  21. //checks if the input is a double and greater than the min value
  22. if (Double.TryParse(this.textBoxXaxisMax.Text,out y) && y > chart1.ChartAreas[0].AxisX.Minimum)
  23. {
  24. this.textBoxXaxisMax.BackColor = Color.White;
  25. chart1.ChartAreas[0].AxisX.Maximum = Convert.ToDouble(this.textBoxXaxisMax.Text);
  26.  
  27.  
  28. //method to scale y axis
  29.  
  30. }
  31. else
  32. //if the textBox is not highlighted
  33. this.textBoxXaxisMax.BackColor = Color.Orange;
  34. }
@H_301_2@现在我想让Y轴自动缩放.应将Y-min计算为(X-min和X-max)部分中所有系列的最小值,并将Y-max计算为所选部分中所有系列的最大值.我的问题是实施.

@H_301_2@在此示例中,Y-min应更改为大约50.

@H_301_2@我在GitHup处主持了这个漏洞示例项目.

解决方法

对于从0到1的所有系列,这会将Y轴缩放到X轴的最小值和最大值[0]之间的最小值和最大值:
  1. double max = Double.MinValue;
  2. double min = Double.MaxValue;
  3.  
  4. double leftLimit = chart1.ChartAreas[0].AxisX.Minimum;
  5. double rightLimit = chart1.ChartAreas[0].AxisX.Maximum;
  6.  
  7. for (int s = 0; s <= 1; s++)
  8. {
  9. foreach (DataPoint dp in chart1.Series[s].Points)
  10. {
  11. if (dp.XValue >= leftLimit && dp.XValue <= rightLimit)
  12. {
  13. min = Math.Min(min,dp.YValues[0]);
  14. max = Math.Max(max,dp.YValues[0]);
  15. }
  16. }
  17. }
  18.  
  19. chart1.ChartAreas[0].AxisY.Maximum = max;
  20. chart1.ChartAreas[0].AxisY.Minimum = min;
@H_301_2@编辑:测试时我注意到重置最小值和最大值并不是很明显.方法如下:

  1. chart1.ChartAreas[0].AxisY.Minimum = Double.NaN;
  2. chart1.ChartAreas[0].AxisY.Maximum = Double.NaN;
  3. chart1.ChartAreas[0].AxisX.Minimum = Double.NaN;
  4. chart1.ChartAreas[0].AxisX.Maximum = Double.NaN;

猜你在找的C#相关文章