为什么我不能设置Y轴的最小值和最大值

时间:2017-09-19 16:02:12

标签: c# charts

我试图在图表上设置两个Y轴的最小值和最大值,而我得到的全部是0到100。

我已经包含了我的初始化代码和图表填充代码。

我显然不是以正确的方式提出问题,或者我现在已经找到了答案。

我错过了"使用"声明?

谢谢大家

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;

    public void initChart()
    {
        //Set up empty Chart area
        chart1.ChartAreas.Add("area");
        chart1.ChartAreas["area"].AxisX.LabelStyle.Format = "yyyy-MM-dd HH:mm:ss";

        chart1.Series.Add("Heart Rate");
        chart1.Series["Heart Rate"].Color = Color.Red;
        chart1.Series["Heart Rate"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;

        chart1.Series.Add("SPo2");
        chart1.Series["SPo2"].Color = Color.Blue;
        chart1.Series["SPo2"].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line;
    }

    public void plotHR()
    {
        double hrValue;
        double o2Value;
        string xStr;
        try
        {
            chart1.Series["Heart Rate"].Points.Clear();
        }
        catch
        {
            // do nothing
        }

        try
        {
            chart1.Series["SPo2"].Points.Clear();
        }
        catch
        {
            // do nothing
        }
        chart1.Series["SPo2"].YAxisType = AxisType.Secondary;
        chart1.Series["Heart Rate"].YAxisType = AxisType.Primary;
        for (int rPtr = 0; rPtr < dgvWorking.RowCount - 1; rPtr ++)
        {
            hrValue = Convert.ToDouble(dgvWorking.Rows[rPtr].Cells[3].Value);
            o2Value = Convert.ToDouble(dgvWorking.Rows[rPtr].Cells[2].Value);
            string strTemp = dgvWorking.Rows[rPtr].Cells[0].Value.ToString() + " " + dgvWorking.Rows[rPtr].Cells[1].Value.ToString();
            xStr = strTemp.Replace(":", "");

            chart1.Series["Heart Rate"].Points.AddXY(strTemp, hrValue);
            chart1.Series["SPo2"].Points.AddXY(strTemp, o2Value);
        }

        //chart1.ChartAreas["area"].RecalculateAxesScale();

        //chart1.Series["Heart Rate"].YAxisType = AxisType.Primary;
        chart1.ChartAreas["area"].AxisY.Interval = 5.00;
        chart1.ChartAreas["area"].AxisY.Minimum = 40.00;
        chart1.ChartAreas["area"].AxisY.Maximum = 90.00;

        //chart1.Series["SPo2"].YAxisType = AxisType.Secondary;
        chart1.ChartAreas["area"].AxisY2.Interval = 5.00;
        chart1.ChartAreas["area"].AxisY2.Minimum = 60.00;
        chart1.ChartAreas["area"].AxisY2.Maximum = 100.00;


    }

2 个答案:

答案 0 :(得分:1)

从设计器添加的Chart控件具有默认ChartAreaSeries以及Legend,均已关联。

如果您有多个ChartArea,例如因为您创建了一个而没有使用chart.ChartAreas.Clear()清除默认值,因此您添加的任何Series仍会与第一个ChartArea相关联。

要将Series s与您编写的ChartArea ca相关联:

s.ChartArea = ca.Name;

或您的姓名:

chart1.Series["SPo2"].ChartArea = chart1.ChartAreas["area"].Name

由于您明确打开了新ChartArea的轴,但仍使用与默认Series相关联的ChartArea,因此新轴值未显示..

请注意,在代码Chart中创建的Chart chart = new Chart();控件将全部为空,您需要添加其第一个ChartArea等。

答案 1 :(得分:0)

这可能是原因:Axis.Minimum Property (Remarks)

  

请注意,如果明确设置此值,则必须考虑数据元素的X值。如果所有数据点的X值均为零,则Chart控件将假设第一个数据点出现在零。此外,如果显式设置了最小值,则将忽略IsStartedFromZero属性。最小值必须小于最大值。