C#控件ZedGraph使用小结

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

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

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

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

不会出现边框的写法:

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

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

zgc.PanModifierKeys = Keys.Shift;

第二种是直接鼠标拖动

zgc.PanModifierKeys = Keys.None;

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

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

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

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

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

zgc.IsShowContextMenu = false;

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

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

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;	// 设置虚线线宽

8、横纵轴缩放控制

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

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

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

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;

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

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

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

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

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

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

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

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

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

zgc.IsShowPointValues = true;

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

zgc.IsShowCursorValues = true;

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

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

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

zgc.IsZoomOnMouseCenter = true;

19、修改曲线图例位置

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

20、修改曲线图例字体

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

21、修改曲线粗细

cureAmp.Line.Width = 1.5f;

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

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

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

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

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);
}

25、动态添加曲线点

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

小点
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;   

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

panel.Legend.Border.IsVisible = false;
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C知道:C#中的ZedGraph是一个强大的图表绘制库,它提供了丰富的功能来创建各种类型的图表,包括折线图、柱状图、饼图等。使用ZedGraph可以轻松地在C#应用程序中添加图表功能。 要使用ZedGraph,首先需要将ZedGraph库添加到你的项目中。你可以通过NuGet包管理器来安装ZedGraph库。在Visual Studio中,右击你的项目,选择"管理NuGet程序包",然后搜索并安装ZedGraph。 安装完成后,你可以在代码中引用ZedGraph命名空间,开始使用它的功能。以下是一个示例代码,展示了如何使用ZedGraph创建一个简单的折线图: ```csharp using ZedGraph; public partial class Form1 : Form { public Form1() { InitializeComponent(); // 创建ZedGraph控件 ZedGraphControl zedGraphControl = new ZedGraphControl(); zedGraphControl.Dock = DockStyle.Fill; this.Controls.Add(zedGraphControl); // 创建一个图表对象 GraphPane graphPane = zedGraphControl.GraphPane; // 添加一些样本数据 double[] x = { 1, 2, 3, 4, 5 }; double[] y = { 10, 20, 15, 25, 30 }; // 创建一个曲线对象 LineItem curve = graphPane.AddCurve("折线图", x, y, Color.Blue, SymbolType.Circle); // 定义图表标题和标签 graphPane.Title.Text = "示例折线图"; graphPane.XAxis.Title.Text = "X"; graphPane.YAxis.Title.Text = "Y"; // 刷新图表 zedGraphControl.AxisChange(); } } ``` 以上代码演示了如何创建一个简单的折线图,并添加样本数据。你可以根据自己的需求,进一步定制和修改图表的样式和数据。希望对你有所帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值