ZedGraph绘图

article/2025/10/6 23:08:10

一、下载及配置

下载ZedGraph 

官网下载地址   http://sourceforge.net/projects/zedgraph/files/ 

添加 ZedGraph.dll 和ZedGraph.Web.dll的引用 在控件库中添加ZedGraph控件 

右键点击工具箱 - 选择项 - .Net Framework 组件 - 浏览 - 找到ZedGraph.dll 和ZedGraph.Web.dll添加 zedGraphControl 控件就出现在工具箱中 

 

二、绘制折线图及添加标注

string sql = string.Format("select * from 成绩表”);

DataTable data =SqlProxy.GetData(sql).Tables[0]);

 

 // Get a reference to the GraphPane instance in the ZedGraphControl

 GraphPane myPane = zg1.GraphPane;

 

 // Set the titles and axis labels

 myPane.Title.Text = string.Format("张望的成绩变化曲线");

 myPane.XAxis.Title.Text = "测试次数";

 myPane.YAxis.Title.Text = "得分";

 // Make up some data points based on the Sine function

 string[] titles = new string[5] { "3000米跑", "单杠引体向上", "双杠杠端臂屈伸", "仰卧起坐", "5.5公斤

 Color[] colors = new System.Drawing.Color[] { Color.Red, Color.Black, Color.Blue, Color.Green, Color

 for (int i = 0; i < data.Columns.Count; i++)

 {

     PointPairList list = new PointPairList();

     for (int j = 0; j < data.Rows.Count; j++)

     {

         double x = j + 1;

         double y = double.Parse(data.Rows[j][i].ToString());

         list.Add(x, y);

     }

     LineItem myCurve = myPane.AddCurve(titles[i], list, colors[i], SymbolType.Diamond);

     for (int tt = 0; tt < data.Rows.Count; tt++)

     {//为每个点添加标注(标注信息为纵坐标值)

         PointPair pp = myCurve.Points[tt];

         TextObj text = new TextObj(pp.Y.ToString("f2"), pp.X, pp.Y, CoordType.AxisXYScale,

             AlignH.Left, AlignV.Center);

         text.ZOrder = ZOrder.A_InFront;

         text.FontSpec.Border.IsVisible = false;

         text.FontSpec.Fill.IsVisible = false;

         text.FontSpec.Angle = 60;//倾斜60度

         myPane.GraphObjList.Add(text);

     }

     // Fill the symbols with white

     myCurve.Symbol.Fill = new Fill(Color.White);

 }

 

// Make the Y axis scale red

 myPane.YAxis.Scale.FontSpec.FontColor = Color.Red;

 myPane.YAxis.Title.FontSpec.FontColor = Color.Red;

 // turn off the opposite tics so the Y tics don't show up on the Y2 axis

 myPane.YAxis.MajorTic.IsOpposite = false;

 myPane.YAxis.MinorTic.IsOpposite = false;

 // Don't display the Y zero line

 myPane.YAxis.MajorGrid.IsZeroLine = false;

 // Align the Y axis labels so they are flush to the axis

 myPane.YAxis.Scale.Align = AlignP.Inside;

 // Manually set the axis range

 myPane.YAxis.Scale.Min = 0;//纵轴显示最小值

 myPane.YAxis.Scale.Max = 30; //纵轴显示最大值

 myPane.YAxis.Scale.MajorStep = 1;//纵轴大刻度步长

 myPane.XAxis.Scale.Min = 1;//横轴最小值

 myPane.XAxis.Scale.Max = data.Rows.Count;//横轴最大值

 myPane.XAxis.Scale.MajorStep = 1;//横轴大刻度步长

 myPane.XAxis.MinorGrid.IsVisible = false;

 myPane.XAxis.MajorGrid.IsVisible = false;

 // Enable the Y2 axis display

 myPane.Y2Axis.IsVisible = false;

 

 myPane.Chart.Fill = new Fill(Color.White, Color.LightGray, 45.0f);

 

zg1.IsShowHScrollBar = false;//不显示水平滚动条

zg1.IsShowVScrollBar = false;//不显示垂直滚动条

zg1.IsAutoScrollRange = false;

zg1.IsShowPointValues = false;

SetSize();

 

zg1.AxisChange();//重新绘制坐标(当设置坐标轴后必须调用此函数)

zg1.Invalidate();

 

 

三、多个ZedGraphControl绘折线图

 

代码如下:

string sql = string.Format("select * from 数据表 where 工厂='A' and 时间>=100 and 时间<=200 and 数据类别='监测点数据' order by 时间 asc ");

 DataTable data = access.SelectData(sql).Tables[0];

string[] titles = new string[] {"Turbidity:0.5NTU","Oxidation Reduction Potential:664mV","pH:8.06",

 "Electrical Conductivity:858μS/cm","Temperature:29.1℃"};

 string[] yText = new string[] {"NTU","ORP","pH","EC","Temp" };

 Color[] colors = new System.Drawing.Color[] { Color.Red, Color.Black, Color.Blue, Color.Green, Color.HotPink };

for (int col_index = 0; col_index < N; col_index++)

 {//依次获取各个ZedGraphControl控件

     ZedGraphControl zgc = this.Controls.Find("zedGraphControl" + col_index, false)[0] as ZedGraphControl;

     zgc.GraphPane.CurveList.Clear();//清空已有图形(下面三行代码也是必不可少)

     zgc.GraphPane.GraphObjList.Clear();

     zgc.AxisChange();

     zgc.Refresh();

     GraphPane myPane = zgc.GraphPane;

     //zgc.Font = new Font("宋体",50);

     myPane.Legend.IsVisible = false;

     // Set the titles and axis labels

     myPane.Title.Text = titles[col_index];

     myPane.XAxis.Title.Text = "Time (s)";

     myPane.YAxis.Title.Text = yText[col_index];

   

     PointPairList list = new PointPairList();

     for (int j = 0; j < data.Rows.Count; j++)

     {

         double x =xMin+ j*X_STEP;

         double y = double.Parse(data.Rows[j][col_index].ToString());

         list.Add(x, y);

     }

     LineItem myCurve = myPane.AddCurve(titles[col_index], list, colors[col_index], SymbolType.Diamond);

    

     myCurve.Symbol.Fill = new Fill(Color.White);

     myPane.YAxis.Scale.FontSpec.FontColor = Color.Red;

     myPane.YAxis.Title.FontSpec.FontColor = Color.Red;

    

     myPane.YAxis.MajorTic.IsOpposite = false;

     myPane.YAxis.MinorTic.IsOpposite = false;

    

     myPane.YAxis.MajorGrid.IsZeroLine = false;

    

     myPane.YAxis.Scale.Align = AlignP.Inside;

 

     myPane.YAxis.Scale.Min = 100;

     myPane.YAxis.Scale.Max = 200;

   

     //myPane.YAxis.Scale.MinorStep = myPane.YAxis.Scale.MajorStep;

     myPane.YAxis.MajorGrid.IsVisible = true;

     

     myPane.XAxis.Scale.Min = 0;

     myPane.XAxis.Scale.Max = 100;

     myPane.XAxis.Scale.MajorStep = 12;

     myPane.XAxis.Scale.MinorStep = 12;

    

     myPane.XAxis.MajorGrid.IsVisible = true;

    

     myPane.Y2Axis.IsVisible = false;

     myPane.Chart.Fill = new Fill(Color.White, Color.LightGray, 45.0f);

     zgc.IsShowHScrollBar = false;

     zgc.IsShowVScrollBar = false;

     zgc.IsAutoScrollRange = false;

     zgc.IsShowPointValues = false;

     //SetSize();

     myPane.IsFontsScaled = false;//必须设置成false,否则设置字体无效

     myPane.Title.FontSpec.Size = 12;

     myPane.XAxis.Title.FontSpec.Size = 12;

     myPane.XAxis.Scale.FontSpec.Size = 12;

     myPane.YAxis.Scale.FontSpec.Size = 12;

     myPane.YAxis.Title.FontSpec.Size = 12;

     zgc.AxisChange();

     zgc.Invalidate();

    

 }

 


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

相关文章

ZedGraph类库之基本教程篇

第一部分&#xff1a;基本教程篇 ZedGraphDemo中一共有9个基本教程的例子。其中大部分都类似&#xff0c;我会讲解其中一些比较典型的例子。把ZedGraph类库的使用逐步展现给大家。 第一节&#xff1a; InitialSampleDemo.cs这个文件 http://blog.csdn.net/tjvictor/archive/20…

ZedGraph使用经验

ZedGraph资源 ZedGraph来源&#xff1a;http://sourceforge.net/project/showfiles.php?group_id114675 ZedGraph 相关例子资源&#xff1a;http://zedgraph.org/wiki/index.php?titleSample_Graphs ZedGraph的特点&#xff1a; 第一&#xff0c;可以先生成图片后再显示&…

C#zegraph用法

一、引用using ZedGraph; 在资源管理器中点击引用&#xff0c;将ZedGraph.dll添加到工程项目中。 二、添加zedGraphControl控件 在工具箱的常规项目右击添加选择项&#xff0c;浏览zedgraph.dll 二、基本图、直方图、折线图、圆饼图 三、zedgraph相关属性 classDescrip…

ZedGraph 绘制动态曲线

文章目录 前言&#xff1a;开发环境&#xff1a;1 下载ZedGraph 控件并设置图形界面2 功能实现3 需求升级4 小结 话不多数&#xff0c;先上一个效果图&#xff1a; 前言&#xff1a; 需要采集一些设备的数据以图表的形式展示出来&#xff0c;研究数据的走向是否平稳&#xff0…

ZedGraph如何显示鼠标附近的曲线的点?介绍三种方法

使用ZedGraph绘制曲线图的时候&#xff0c;不仅仅是看曲线的走向&#xff0c;也需要查看曲线上某位位置处采集到的数据是多少。下面介绍三种方法&#xff0c;从简单到复杂。 文章目录 1、使用自带的功能显示点的坐标2、 多条曲线的坐标点同时显示3、 多条曲线的坐标点同时显示…

开源框架ZedGraph的使用

.Net的绘图控件ZedGraph的使用 ZedGraph 是一个开源的.NET图表类库&#xff0c; 全部代码都是用C#开发的。它可以利用任意的数据集合创建2D的线性和柱形图表 我们一般不直接使用ZedGraphControl对象&#xff0c;而是使用它的面板对象来进行操作&#xff0c;这里我们将它的面板…

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…