有回响的山谷 2024-04-19 18:14 采纳率: 53.3%
浏览 21
已结题

zedgraph 如何绘制静态网格线

想问zedgraph 如何绘制静态网格线,就是波形放大缩小时网格线不随波形移动
zedgraph 绘制网格线是根据Y轴绘制的,所以在拖动Y轴(移动曲线)时,网格线会随着曲线一起移动,而且多曲线时,如果第一条曲线隐藏掉,网格线也会消失,所以想问,怎么绘制静态网格线,就是基于绘图区域的网格线,而不是YAxis的MajorStep
目前网格线的设置


```c#
GraphPane pPanel = this.zedGraphChart.GraphPane;
float dashLength = 0.1f;
//X轴标题不显示
pPanel.XAxis.Title.IsVisible = false;
//设置刻度文本颜色
pPanel.XAxis.Scale.FontSpec.FontColor = enColorY;
//设置X轴颜色
pPanel.XAxis.Color = enColorY;
//zedgraph显示参考线/辅助线/网格线
pPanel.XAxis.MajorGrid.IsVisible = true;
pPanel.XAxis.MajorGrid.Color = enColorY;
pPanel.XAxis.MajorGrid.DashOn = dashLength;// 网格为虚线,这句话是设置虚线中的实线部分长度
pPanel.XAxis.MajorGrid.DashOff = 0f;// 设置虚线中的空白部分长度
pPanel.XAxis.MajorGrid.PenWidth = 0.1f;// 设置虚线线宽
//子网格线 不可见
pPanel.XAxis.MinorGrid.IsVisible = false;
//刻度
//设置主刻度的长度
pPanel.XAxis.MajorTic.Size = 10f;
//主刻度颜色 
pPanel.XAxis.MajorTic.Color = enColorY;
//隐藏X轴正上方的刻度
pPanel.XAxis.MajorTic.IsOpposite = false;
pPanel.XAxis.MinorTic.IsOpposite = false;
//朝内
pPanel.XAxis.MajorTic.IsOutside = false;
pPanel.XAxis.MinorTic.IsOutside = false;
//X轴最小刻度值自动缩放
pPanel.XAxis.Scale.MinorStepAuto = true;
//设置第一条Y轴标题
pPanel.YAxis.Title.IsVisible = false;
pPanel.YAxis.Title.FontSpec.Size = 11f;
//设置网格线 主网格线
pPanel.YAxis.MajorGrid.IsVisible = true;
pPanel.YAxis.MajorGrid.Color = enColorY;
pPanel.YAxis.MajorGrid.DashOn = dashLength;
pPanel.YAxis.MajorGrid.DashOff = 0f;
pPanel.YAxis.MajorGrid.PenWidth = 0.1f;
//设置子网格线不可见
pPanel.YAxis.MinorGrid.IsVisible = false;
//刻度
//设置主刻度的长度
pPanel.YAxis.MajorTic.Size = 11f;
//主刻度颜色 
pPanel.YAxis.MajorTic.Color = enColorY;
pPanel.YAxis.MinorTic.Color = enColorY;
//朝外
pPanel.YAxis.MajorTic.IsOpposite = false;
pPanel.YAxis.MinorTic.IsOpposite = false;
pPanel.YAxis.MajorTic.IsOutside = false;
pPanel.YAxis.MinorTic.IsOutside = false;

我的现象
显示曲线1

img


隐藏曲线1,辅助线也没了

img


移动YAxis,辅助线也动了

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-04-19 18:14
    关注

    引自免费微信小程序:皆我百晓生

    为了实现静态网格线,你需要在ZedGraph中创建一个新的自定义网格类,并重写其Draw()方法。这样,你可以控制网格线的绘制方式,使其独立于坐标轴的缩放和移动。这里是一个简单的步骤指南以及示例代码:

    首先,创建一个继承自ZedGraph.ZedGraphControl的控件,然后添加自定义网格类。

    public partial class MyCustomGrid : ZedGraph.ZedGraphControl
    {
        // ...
    }
    

    接下来,创建一个自定义网格类,继承自ZedGraph.Grid

    public class CustomStaticGrid : Grid
    {
        public CustomStaticGrid()
        {
            // 设置默认属性
            IsVisible = true;
            Color = Color.LightGray;
            DashStyle = System.Drawing.Drawing2D.DashStyle.Solid;
            PenWidth = 0.5f;
            // 其他必要的属性设置...
        }
    
        protected override void Draw(Graphics g, GraphPane pane, bool drawMajor)
        {
            base.Draw(g, pane, drawMajor);
    
            // 获取绘图区域的大小
            RectangleF plotArea = pane.Chart.Rect;
    
            // 计算网格线的位置
            float yMin = pane.Chart.Axes[AxisType.SecondaryY].ViewMin;
            float yMax = pane.Chart.Axes[AxisType.SecondaryY].ViewMax;
            float xMin = pane.Chart.Axes[AxisType.X].ViewMin;
            float xMax = pane.Chart.Axes[AxisType.X].ViewMax;
    
            // 创建用于绘制的Pen对象
            Pen pen = new Pen(Color, PenWidth);
            pen.DashPattern = new float[] { DashLength, DashOff };
    
            // 在绘图区域内绘制垂直网格线
            for (float y = yMin; y <= yMax; y += MajorStep)
            {
                g.DrawLine(pen, plotArea.Left, y + plotArea.Top, plotArea.Right, y + plotArea.Top);
            }
    
            // 在绘图区域内绘制水平网格线
            for (float x = xMin; x <= xMax; x += MajorStep)
            {
                g.DrawLine(pen, x + plotArea.Left, plotArea.Bottom, x + plotArea.Left, plotArea.Top);
            }
        }
    }
    

    最后,在你的窗体中实例化这个控件并设置自定义网格。

    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
    
            // 创建自定义网格实例
            CustomStaticGrid customGrid = new CustomStaticGrid();
            customGrid.Dock = DockStyle.Fill;
            
            // 设置自定义网格为当前的GraphPane
            customGrid.GraphPane = zedGraphChart.GraphPane;
            // 或者将customGrid赋值给GraphPane的Grid属性
            // zedGraphChart.GraphPane.Grid = customGrid;
    
            // 添加数据系列等其他操作...
    
            // 将自定义网格添加到窗体上
            Controls.Add(customGrid);
        }
    }
    

    这段代码将会创建一个静态网格,它不会随着Y轴的缩放而移动。注意,这里的MajorStep应该与你的需求相符,你可以根据实际情况调整。此外,确保你的数据已经正确地添加到了MyCustomGrid控件中。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月1日
  • 创建了问题 4月19日