首页 > 解决方案 > c#图表y轴统一缩放

问题描述

我正在使用一种设备,它接收 4-20MA 的压力读数,将其转换为电压并在一定范围内进行缩放,然后将数据绘制成实时的折线图。我正在缩放 y 轴,并有按钮在运行时根据需要的范围调整 y 轴比例。所以换句话说,如果压力从 0 psi 开始,然后一直跳到 20,000,我希望图表显示 -100(最小 - 只有这样,如果 PSI 为 0,它是可见的)到 0、100、200, ..., 19800, 19900, 20000。但是,如果压力为 19743,则比例为“-43, 43, 143, ..., 19843, 19943” 之类的。有没有办法改变这种情况,所以它只计算“整百”之类的?

我的 y 轴间隔跳动 50 秒,因此轴可以移动 0、50、100、...或 0、100、200 等(如果需要,可以一次跳动 500 psi)。但我只想让 y 轴数字显示整百个,如果这有意义的话。

我的最大 y 值是最大输入值(我正在比较 3 个输入值)并将 1,000 添加到该值。因此,如果当前最大压力为 19,000 psi,图表应显示 -100 到 20,0000。

我对传入值的比较 - 名称是“RawIn#”,但这些已经被缩放。不好的变量命名,我知道。

        if (rawIn0 > rawIn1)
        {
            maxY = Convert.ToInt32(rawIn0);
        }
        else if (rawIn1 > rawIn0)
        {
            maxY = Convert.ToInt32(rawIn1);
        }
        if (maxY < rawIn2)
        {
            maxY = Convert.ToInt32(rawIn2);
        }

        if (maxY > absoluteMaxY)
        {
            absoluteMaxY = maxY;
        }

        if (rawIn0 > rawIn1)
        {
            minY = Convert.ToInt32(rawIn1);
        }
        else if (rawIn1 > rawIn0)
        {
            minY = Convert.ToInt32(rawIn0);
        }
        if (minY > rawIn2)
        {
            minY = Convert.ToInt32(rawIn2);
        }            

我正在缩放图表的当前方式。MinY 始终为 0。因此最小值 = -100。

        chart1.ChartAreas[0].AxisY.Maximum = absoluteMaxY + 1000;
        chart1.ChartAreas[0].AxisY.Minimum = minY - 100;

我的按钮在运行时增加和减少间隔。// 间隔越高,越容易看到 y 轴线越少的整个图表。

    private void yValueSizeInc_Click(object sender, EventArgs e)
    {
        if (chart1.ChartAreas[0].AxisY.Interval < 50)
        {
            chart1.ChartAreas[0].AxisY.Interval = 50;
        }
        else
        {
            chart1.ChartAreas[0].AxisY.Interval += 50;
        }
        Properties.Settings.Default.pressureInterval = 
        (int)chart1.ChartAreas[0].AxisY.Interval;
        yValueSize.Text = chart1.ChartAreas[0].AxisY.Interval.ToString();
    }

    private void yValueSizeDec_Click(object sender, EventArgs e)
    {
        if (chart1.ChartAreas[0].AxisY.Interval <= 50)
        {
            chart1.ChartAreas[0].AxisY.Interval = 50;
        }
        else
        {
            chart1.ChartAreas[0].AxisY.Interval -= 50;
        }
        Properties.Settings.Default.pressureInterval = (int) 
        chart1.ChartAreas[0].AxisY.Interval;
        yValueSize.Text = chart1.ChartAreas[0].AxisY.Interval.ToString();
    }

可以看出压力计数不均匀

标签: c#winformscharts

解决方案


推荐阅读