设置独立于数据范围的固定主要网格标记

Setting fixed major grid marks independent of data range

这是我在 C# 中的第一个项目,我正在尝试根据数据创建绘图。

我正在努力绘制对数尺度上的次要和主要网格线和标签。

我已将刻度设置为对数,将基数设置为 10,将主要和次要间隔设置为 1,效果很好,但是,间隔从刻度上的最小值开始,例如,如果数据从 30M 开始(我正在处理频率)下一个主要刻度是 300M 和 3G,这是不应该的。

有没有办法将主要网格设置为 1、10、100 等,而不依赖于显示的数据?我试过改变间隔、基数和偏移量,但收效甚微。

area.AxisX.IsLogarithmic = true;
area.AxisX.LogarithmBase = 10;
area.AxisX.Interval = 1;
//area.AxisX.IntervalOffset = 10000;
area.AxisX.IntervalAutoMode = IntervalAutoMode.FixedCount;
area.AxisX.MajorGrid.Enabled = true;
area.AxisX.MajorTickMark.Enabled = true;


area.AxisX.MinorGrid.Enabled = true;
area.AxisX.MinorGrid.Interval = 1;

area.AxisX.MinorTickMark.Enabled = true;
area.AxisX.MinorTickMark.Interval = 1;
area.AxisX.Minimum = minMaxXY[0];  // in this example 30 M
area.AxisX.Maximum = minMaxXY[1];  // in this example 1 G

这是当前网格的 link https://ibb.co/3WkxLfc

感谢您的宝贵时间和回答!

多亏了 TaW 重播,我的程序才得以运行。

这是我使用 customLabels 位置绘制网格线的解决方案。

    private void Chart1_PostPaint(object sender, ChartPaintEventArgs e)
    {
        if (e.Chart.ChartAreas.Count > 0) // I don't yet truly understand when this event occurs, 
                                          // so I got plenty of null references.
        {
            Graphics g = e.ChartGraphics.Graphics;
            g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
            Color minorGridColor = Color.Gainsboro;
            ChartArea area = e.Chart.ChartAreas[0];

            double aymin = area.AxisY.Minimum;
            double aymax = area.AxisY.Maximum;
            int y0 = (int)area.AxisY.ValueToPixelPosition(aymin);
            int y1 = (int)area.AxisY.ValueToPixelPosition(aymax);

            foreach (var label in chart1.ChartAreas[0].AxisX.CustomLabels)
            {
                double xposition = area.AxisX.ValueToPixelPosition(Math.Pow(10, label.FromPosition + 0.1));
                if (xposition > area.AxisX.ValueToPixelPosition(minMaxXY[0]) && xposition < area.AxisX.ValueToPixelPosition(minMaxXY[1]))
                //this prevents drawing of lines outside of the chart area
                {
                    int x = (int)xposition;
                    using (Pen dashed_pen = new Pen(Color.FromArgb(10, 0, 0, 0), 1))
                    {
                        dashed_pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dash;
                        g.DrawLine(dashed_pen, x, y0, x, y1);

                    }
                }
            }
        }
    }

我也找到了 CustomLabel.GridTicks 属性,但由于某些原因它没有用。