开源框架ZedGraph的使用

article/2025/10/7 0:03:49

.Net的绘图控件ZedGraph的使用

ZedGraph 是一个开源的.NET图表类库, 全部代码都是用C#开发的。它可以利用任意的数据集合创建2D的线性和柱形图表

我们一般不直接使用ZedGraphControl对象,而是使用它的面板对象来进行操作,这里我们将它的面板对象命名为myPane

//创建ZedGraph对象ZedGraph.ZedGraphControl zgc = new ZedGraph.ZedGraphControl();//获得ZedGraph对象的面板对象
GraphPane myPane = zgc.GraphPane;

1、一些关于myPane对象的常用的属性及其作用

属性值属性介绍
XAxis图表的X轴

1、设置窗体的标题

myPane.Title.Text = “这是窗体的标题”

1、设置X轴等不使用10次幂表示数据,而是使用具体的数来表示

 myPane.XAxis.Scale.IsUseTenPower = false;

2、在图形的显示界面中显示栅格

myPane.XAxis.MajorGrid.IsVisible = true;//设置X轴等不使用10次幂表示数据,而是使用具体的数来表示myPane.XAxis.Scale.Mag = 0;myPane.YAxis.Scale.Mag = 0;myPane.Y2Axis.Scale.Mag = 0;

3

     //去除两个Y轴之间标度的相互对应,使标度均匀分布myPane.YAxis.MajorTic.IsOpposite = false;myPane.Y2Axis.MajorTic.IsOpposite = false;myPane.YAxis.MinorTic.IsOpposite = false;myPane.Y2Axis.MinorTic.IsOpposite = false;

1、 基本操作
在初始化ZedGraphControl对象之后
ZedGraph.ZedGraphControl zedGraph = new ZedGraph.ZedGraphControl();

  1. 第一步,导入ZedGraph.dll文件,具体如何导入的参见:C#中如何导入本地dll文件

  2. 在Form1这个类中添加一个属性 private ZedGraph.ZedGraphControl zg1;我们在之后的窗体构建中需要使用到这个对象

  3. 在Form1.Designer.cs的 InitializeComponent()方法中添加如下代码,对我们的zg1属性进行初始化

            this.components = new System.ComponentModel.Container();this.zg1 = new ZedGraph.ZedGraphControl();this.SuspendLayout();// // zg1// this.zg1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right)));this.zg1.EditButtons = System.Windows.Forms.MouseButtons.Left;this.zg1.Location = new System.Drawing.Point(12, 11);this.zg1.Name = "zg1";this.zg1.PanModifierKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Shift | System.Windows.Forms.Keys.None)));this.zg1.ScrollGrace = 0D;this.zg1.ScrollMaxX = 0D;this.zg1.ScrollMaxY = 0D;this.zg1.ScrollMaxY2 = 0D;this.zg1.ScrollMinX = 0D;this.zg1.ScrollMinY = 0D;this.zg1.ScrollMinY2 = 0D;this.zg1.Size = new System.Drawing.Size(931, 524);this.zg1.TabIndex = 0;this.Controls.Add(this.zg1);this.ClientSize = new System.Drawing.Size(955, 547);

注意要设置this.ClientSize = new System.Drawing.Size(955, 547)的大小为(955,547),
原来的是(800,450),更改之后可以让生成的图形进行居中显示

  1. 此时就可以在Form1.cs中使用zg1了,创建一个
    void CreateGraph(ZedGraphControl zgc)方法,入参是ZedGraphControl类型,此处的ZedGraphControl类是ZedGraph.dll中封装的一个类
 private void Form1_Load(object sender, EventArgs e){CreateGraph(zg1);}

此时我们在Form1_Load方法中调用CreateGraph()方法,并将在Form1.Designer.cs中创建的属性zg1作为参数进行传递,接下来就是在CreateGraph()中写创建曲线的代码即可

  1. 首先创建一个面板对象(画的东西总得有个载体吧),作为二维图形,想要画图自然就是确定X与Y坐标,然后将每一个点使用曲线连接起来即可,这样就实现了曲线的绘制
GraphPane myPane = zgc.GraphPane;

创建GraphPane对象,这里的GraphPane类也是zedGraph中封装的一个类

            myPane.Title.Text = "曲线测试";myPane.XAxis.Title.Text = "X轴";myPane.YAxis.Title.Text = "Y轴";

这里设置了图形的标题,以及X轴与Y轴旁边显示的文本,运行程序,你会看到一个空的坐标轴以及你设置的3个文本信息,如下所示
在这里插入图片描述
这里的坐标轴的标度是系统默认的标度

  • 曲线是由一个个点连接而成的,我们先创建一个曲线对象,再将点对象一个个放置到该曲线对象上,将这些点用曲线进行连接,就形成了我们需要的曲线效果了
  • LineItem是ZedGraph自带的曲线对象
  • PointPairList是ZedGraph自带的放置坐标点的容器对象,将坐标以(X,Y)的形式添加到容器中
            LineItem lineItem;Random random = new Random();PointPairList list = new PointPairList();for (int i = 0; i < 20; i++){list.Add(i, random.NextDouble()  * 100);}lineItem = myPane.AddCurve("测试的曲线", list, Color.Red);zgc.AxisChange();

这里我们使用Random函数生成Y轴坐标,X坐标按照第几次循环来生成,这里我们创建的是最简单的一条曲线的情况。记住最后要加 zgc.AxisChange();这个方法的调用,曲线才能正常显示,显示的效果如下所示
在这里插入图片描述


http://chatgpt.dhexx.cn/article/RA3HGymI.shtml

相关文章

redis解决高并发问题,如商品秒杀

redis真的是一个很好的技术&#xff0c;它可以很好的在一定程度上解决网站一瞬间的并发量&#xff0c;例如商品抢购秒杀等活动。。。 redis之所以能解决高并发的原因是它可以直接访问内存&#xff0c;而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。 …

Redis的高并发场景解决方案

1.Redis的信息 &#xff08;1&#xff09;单线程容易实现。 &#xff08;2&#xff09;效率高轻松处理每秒几十万数据&#xff08;因为是占内存的所以CPU不是瓶颈&#xff09;。 &#xff08;3&#xff09;支持数据类型多&#xff08;String&#xff0c;List&#xff0c;has…

java如何解决高并发问题_java怎么处理高并发?

java处理高并发的方法:1、优化代码,减少不必要的资源浪费;2、把图片与页面进行分离,将图片放到独立的图片服器;3、使用缓存,可以大量减少与数据库的交互,提高性能;4、使用数据库集群;5、进行DB优化;6、硬件上做到负载均衡等等。 java处理高并发的方法: 1、从最基础的…

flask 多进程/多线程 解决高并发问题

1、简介&#xff1a; Flask 默认是单进程&#xff0c;单线程阻塞的任务模式&#xff0c;在项目上线的时候可以通过nginxgunicorn 的方式部署flask任务。 app.run()中可以接受两个参数&#xff0c;分别是threaded和processes&#xff0c;用于开启线程支持和进程支持。 1.thre…

高并发超卖问题简要解决方案

1、传统通过数据库保证不超卖 事务行锁并不是解决超卖的方案&#xff0c;只是保障数据的统一性。传统通过回滚事务的方式防止某些用户多卖的情况。 采用新建一个防重表事务的方式防止超卖。同一事务中&#xff0c;采用如 用户ID商品ID 的方式作为防重表唯一索引字段的数值&…

python 中如何解决高并发问题

python 中小量高并发问题的解决 描述&#xff1a;在多个用户同时发起对同一个商品的下单请求时&#xff0c;先查询商品库存&#xff0c;再修改商品库存&#xff0c;会出现资源竞争问题&#xff0c;导致库存的最终结果出现异常。 例如&#xff1a;id为16的商品的库存为10&#…

高并发的解决方式

大型网站如何防止崩溃&#xff0c;解决高并发带来的问题 大型网站&#xff0c;比如门户网站&#xff0c;在面对大量用户访问、高并发请求方面带来的问题 1大并发&#xff1a;在同一个时间点&#xff0c;有大量的客户来访问我们的网站&#xff0c;如果访问量过大&#xff0c;就…

三个方法解决php并发问题

福利&#xff1a;[网络安全重磅福利&#xff1a;入门&进阶全套282G学习资源包免费分享 &#xff01;] 解决php并发问题的方法有很多&#xff0c;具体可以使用MySQL的行级锁、乐观锁和Redis的分布式锁等技术来解决。此外&#xff0c;还可以使用消息队列、多进程、多线程等技…

Redis(十)redis使用list解决高并发问题,如商品秒杀

redis真的是一个很好的技术&#xff0c;它可以很好的在一定程度上解决网站一瞬间的并发量&#xff0c;例如商品抢购秒杀等活动。 redis之所以能解决高并发的原因是它可以直接访问内存&#xff0c;而以往我们用的是数据库(硬盘),提高了访问效率,解决了数据库服务器压力。 为什…

PHP解决高并发问题

举个例子&#xff0c;高速路口&#xff0c;1秒钟来5部车&#xff0c;每秒通过5部车&#xff0c;高速路口运作正常。突然&#xff0c;这个路口1秒钟只能通过4部车&#xff0c;车流量仍然依旧&#xff0c;结果必定出现大塞车。&#xff08;5条车道忽然变成4条车道的感觉&#xff…

如何解决高并发,秒杀问题

相信不少人会被这个问题困扰&#xff0c;分享大家一篇这样的文章&#xff0c;希望能够帮到你&#xff01; 一、秒杀业务为什么难做&#xff1f; 1&#xff09;im系统&#xff0c;例如qq或者微博&#xff0c; 每个人都读自己的数据 &#xff08;好友列表、群列表、个人信息&a…

JAVA RedisTemplate实现(加锁/解锁) 解决高并发问题

基于传统的单机模式下的并发锁&#xff0c;已远远不能满足当下高并发大负载的情况&#xff0c;当下常用的并发处理如下 1、使用synchronized关键字 2、select for update 乐观锁 3、使用redis实现同步锁 方案一 适合单机模式&#xff0c; 方案二 虽然满足多节点服务实例…

mysql 高并发写入锁表_使用mysql中的锁解决高并发问题

阿里云产品通用代金券,最高可领1888分享一波阿里云红包. 阿里云的购买入口 为什么要加锁 多核计算机的出现,计算机实现真正并行计算,可以在同一时刻,执行多个任务。在多线程编程中,因为线程执行顺序不可控导致的数据错误。比如,多线程的理想状态是这样的 多线程理想.jpg 但是…

php如何解决高并发问题

如何用PHP解决高并发问题&#xff1f;&#xff08;附源码&#xff09;-php教程-PHP中文网上篇文章给大家介绍了《让我们再进一步了解PHP流程控制语句之if语句吧&#xff01;&#xff01;&#xff01;(附源码)​》&#xff0c;本文继续给大家介绍PHP解决高并发问题https://www.p…

Mysql如何利用乐观锁解决高并发问题

Mysql如何利用乐观锁解决高并发问题 msql Mysql如何利用乐观锁解决高并发问题前言一、案例说明&#xff1a;二、乐观锁&#xff1a;1.介绍:使用版本号实现乐观锁 2.代码实现 总结 前言 例如&#xff1a;在这之前已经许久未写博客了&#xff0c;最近突发奇想还是决定把这个捡起…

Redis解决高并发问题

1 模拟商品抢购和并发的效果 这里模拟一个商品抢购的过程所带来的问题&#xff0c;以及解决问题的思路。 这里模拟的商品抢购过程是一个商品正常购买的过程&#xff0c;其中包含了两个主要的步骤&#xff1a;商品库存减少和商品购买记录的添加。 下面搭建项目环境。 1.1 数…

一文教你如何处理高并发

目录 前言 一、为什么要解决高并发问题 二、性能评估 计算峰值流量方法 本章结论 三、性能测试 测试目的 找到系统最高承受压力的临界点 找出系统中的短板 测试工具 简单测试 1.数据抓包 2.加压测试 3.硬件跟踪 4.JVM跟踪 5.其它组件测试 6.总括 全链路测试&…

高并发场景设计与解决方案

所有的平台或系统建设和维护中&#xff0c;高并发场景都存在&#xff0c;解决方案也是各种样式&#xff0c;本次将从初中、高二个场景给出设计方案。 本文内容&#xff1a;高并发场景定义&#xff0c;高并发初中级场景与解决方案&#xff0c;高并发高级场景与解决方案 第一部分…

数据库关系代数运算

转载&#xff1a;https://wenku.baidu.com/view/f301bf48e45c3b3567ec8b75.html

数据库关系模型与关系运算---2022.2.13

关于外模式&#xff0c;模式&#xff0c;内模式的理解 可以看到用不同的语句进行表示&#xff1a; 关系的性质 概念模式/内模式映射是物理独立性的关键&#xff1b; 外模式/概念模式映射就是逻辑独立性的关键 候选键 (最小组成的超键) 关系中的一个属性组&#xff0c;其值…