Zedgraph 总结

毕业设计需要设计可以实时显示数据曲线的上位机,于是学习了ZedGraph控件的使用,对用到的属性进行记录。
0、变量声明

ZedGraphControl zgc;
GraphPane panel = zgc.GraphPane;
PointPairList listAmp = new PointPairList();
LineItem cureAmp = panel.AddCurve("Amplitude", listAmp, Color.Red, SymbolType.Square);

   
   
  • 1
  • 2
  • 3
  • 4

1、设置字体样式时避免出现边框
会出现边框的写法:

FontSpec myFont = new FontSpec(“Arial”, 16, Color.Black, true, false, false);
panel.Title.FontSpec = myFont;

   
   
  • 1
  • 2

不会出现边框的写法:

panel.Title.FontSpec.Family = "Arial";
panel.Title.FontSpec.Size = 16;
panel.Title.FontSpec.IsBold = true;

   
   
  • 1
  • 2
  • 3

2、鼠标拖动曲线图
第一种是按住shift键后拖动

zgc.PanModifierKeys = Keys.Shift;

   
   
  • 1

第二种是直接鼠标拖动

zgc.PanModifierKeys = Keys.None;

   
   
  • 1

3、曲线图上下左右移动控制

zgc.IsEnableHPan = false; // 鼠标拖动时禁止横向移动
zgc.IsEnableVPan = false; // 鼠标拖动时禁止纵向移动

   
   
  • 1
  • 2

4、设置缩放比例与鼠标滚轮步骤大小关系

zedGraphControl1.ZoomStepFraction = 0; // 比例为0,即禁用鼠标滚轮的缩放功能
zedGraphControl1.ZoomStepFraction = 0.1; // 比例越大,缩放越灵敏

   
   
  • 1
  • 2

5、禁用右键菜单
右键菜单还挺好用的,我没有禁用过。

zgc.IsShowContextMenu = false;

   
   
  • 1

6、不显示上方x轴
其中MajorTic指大刻度,MinorTic指小刻度。

zgc.GraphPane.XAxis.MajorTic.IsOpposite = false;
zgc.GraphPane.XAxis.MinorTic.IsOpposite = false;

   
   
  • 1
  • 2

7、显示网格并设置网格线参数

zgc.GraphPane.XAxis.MajorGrid.IsVisible = true;	// 显示大刻度对应的网格
zgc.GraphPane.XAxis.MinorGrid.IsVisible = true;	// 显示小刻度对应的网格

panel.XAxis.MajorGrid.DashOn = 5f; // 网格为虚线,这句话是设置虚线中的实线部分长度
panel.XAxis.MajorGrid.DashOff = 2f; // 设置虚线中的空白部分长度
panel.XAxis.MajorGrid.PenWidth = 1.5f; // 设置虚线线宽

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

8、横纵轴缩放控制

zgc.IsEnableVZoom = false;	// 纵轴不缩放,默认为true,即可缩放
zgc.IsEnableHZoom = false;	// 横轴不缩放

 
 
  • 1
  • 2

9、纵轴刻度的十次幂显示控制
当放大得很大时,纵轴刻度会用十次幂表示。但是我赋值false后仍然显示十次幂,这个我暂时没有找到原因。

zgc.GraphPane.YAxis.Scale.IsUseTenPower = false;	// 不用十次幂

 
 
  • 1

10、刻度线显示控制
以左边的纵坐标轴为例。画一根竖直的线,再画一根水平的线。outside指的是位于竖线左边的横线,inside指位于竖线右边的横线,但是crossinside和crossoutside是什么我还没想明白。我习惯把大刻度的crossinside和crossoutside都关了,把小刻度的outside和inside都关了。这样刻度线看起来比较清爽。

panel.YAxis.MajorTic.IsCrossInside = false;
panel.YAxis.MajorTic.IsCrossOutside = false;
panel.YAxis.MinorTic.IsInside = false;
panel.YAxis.MinorTic.IsOutside = false;

 
 
  • 1
  • 2
  • 3
  • 4

11、坐标轴起点
这个设置的作用就是当你放大坐标轴,比如x轴,最小的刻度是BaseTic,刻度左边是没有刻度值的了,并不是说这个刻度是图像的最左边。

panel.XAxis.Scale.BaseTic = 0;	// 横坐标轴的起点从零开始

 
 
  • 1

12、大小刻度步长设置
大刻度是100一个单位,小刻度是20一个单位,这样的话相邻两根大刻度线之间有4根小刻度线。

panel.XAxis.Scale.MinorStep = 20;
panel.XAxis.Scale.MajorStep = 100;

 
 
  • 1
  • 2

13、最大最小刻度设置
很多情况下并不知道最大刻度应该是多少。所以可以选择自动匹配。还有一个MaxGrace,不知道跟Max的区别是什么。

panel.YAxis.Scale.Max = 3100;
panel.YAxis.Scale.Min = 0;
panel.YAxis.Scale.MaxAuto = true; // 根据数据自动匹配纵坐标轴的最大值

 
 
  • 1
  • 2
  • 3

14、除数据区域外的图填充

panel.Fill = new Fill(Color.White, Color.LightGray, 45.0f);	// 从左上角45.0°开始,从白色过渡到浅灰色

 
 
  • 1

15、鼠标移动到曲线上某个数据点时显示数据点的坐标

zgc.IsShowPointValues = true;

 
 
  • 1

16、鼠标移动到曲线上任何位置时显示该位置的坐标

zgc.IsShowCursorValues = true;

 
 
  • 1

17、显示滚动条
区域放大后可以用滚动条浏览其他区域的数据。但是滚动条只能拉动一次,拉一次后就消失了,暂时没有找到原因。

zgc.IsShowHScrollBar = true;
zgc.IsShowVScrollBar = true;

 
 
  • 1
  • 2

18、以鼠标所在位置为中心进行放大
默认是以图形中心进行放大。

zgc.IsZoomOnMouseCenter = true;

 
 
  • 1

19、修改曲线图例位置

panel.Legend.Position = ZedGraph.LegendPos.Top;

 
 
  • 1

20、修改曲线图例字体

panel.Legend.FontSpec.Family = "Arial";
panel.Legend.FontSpec.Size = 14;

 
 
  • 1
  • 2

21、修改曲线粗细

cureAmp.Line.Width = 1.5f;

 
 
  • 1

22、填充曲线数据点的图形

cureAmp.Symbol.Fill = new Fill(Color.Red);

 
 
  • 1

23、关联曲线到纵坐标轴
当两条曲线各自使用不同刻度的纵坐标轴时,需要把曲线跟相应的坐标轴关联起来。

cureAmp.IsY2Axis = true; // 关联cureAmp曲线到右边的纵坐标轴

 
 
  • 1

24、随机生成曲线点集

Random t = new Random();
for (int i = 0; i < 360; i += 10)
{
	double x = i;
	double y = t.NextDouble() * 1000;
	double y2 = t.NextDouble() * 80 + 5;
	listAmp.Add(x, y);
	listFreq.Add(x, y2);
}

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

25、动态添加曲线点

zgcAmpFreq.AxisChange(); // 因为点增加,需要自动修改横轴最大值(前提是MaxAuto为true),所以需要更新坐标轴。
Refresh(); // 把变化后的点集显示在图里

 
 
  • 1
  • 2

小点
1、我在关闭某个通道后重新打开,发现原本是0-3000的纵坐标变成了2000-3000的纵坐标(我的测试数据是2300),也就是纵坐标的最小值变了。于是我把最小值设置成0(原本没有设置)、把纵坐标轴的MinAtuo和MaxAuto都关了。这样的话关闭后打开某个通道,该通道对应的坐标轴的范围不变。

不懂的点
1、不知道这个是干嘛的。运行后也没看出来是什么意思。YAxis和Y2Axis只能用AlignP,不能用AlignV或者AlignH。

panel.YAxis.Scale.Align = AlignP.Outside;
panel.Y2Axis.Scale.Align = AlignP.Outside;   

 
 
  • 1
  • 2

2、测试时,这句话加上后(true和false)并没有产生什么改变。

panel.Legend.Border.IsVisible = false;

 
 
  • 1
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值