ZedGraph怎样在生成曲线时随机生成不一样的颜色
场景
在使用ZedGraph生成多条曲线时为了能区分曲线颜色,要求随机设置曲线颜色。
首先从System.Drawing.Color中获取所有颜色的对象的数组,然后将其顺序打乱随机排序,然后在生成曲线时从Color数组中取Color并赋值。
效果

注:
博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
单纯生成曲线的代码
LineItem myCurve = myPane.AddCurve(yList[i].Title, list, curveColor, SymbolType.None);
第一个参数:图例标题
第二个参数:坐标点的list
第三个参数:颜色Color对象
第四个参数:曲线节点符号
所以在生成曲线时就要在第三个参数上进行修改
首先获取Color的所有颜色对象
//用于存取取出的颜色对象
List<Color> colorList = new List<Color>();
//通过GetMember获取所有的公共成员
foreach (var item in typeof(Color).GetMembers())
{
//只取属性且为属性中的已知Color,剔除byte属性以及一些布尔属性等(A B G R IsKnownColor Name等)
if (item.MemberType == System.Reflection.MemberTypes.Property && System.Drawing.Color.FromName (item.Name).IsKnownColor == true)
{
Color color = System.Drawing.Color.FromName(item.Name);
colorList.Add(color);
}
}
//转成数组
Color[] colors = colorList.ToArray();
然后将Color数组的顺序进行打乱
colors = GetDisruptedItems(colors);
调用乱序方法
private static Color[] GetDisruptedItems(Color[] colors)
{
//生成一个新数组:用于在之上计算和返回
Color[] temp;
temp = new Color[colors.Length];
for (int i = ; i < temp.Length; i++)
{
temp[i] = colors[i];
} //打乱数组中元素顺序
Random rand = new Random(DateTime.Now.Millisecond);
for (int i = ; i < temp.Length; i++)
{
int x, y; Color t;
x = rand.Next(, temp.Length);
do
{
y = rand.Next(, temp.Length);
} while (y == x); t = temp[x];
temp[x] = temp[y];
temp[y] = t;
} return temp; }
然后在循环生成曲线时,循环条件为要生成的曲线数量与颜色数组的长度进行对比判断。
int index = ;
//循环添加曲线
foreach(DataTreeNode node in Global.Instance.PrepareCompareDataInOne)
{ list = SetCurveTextInOne(yList[i].TitleKey,record);
//如果要生成的曲线数量 < 颜色数组长度 那么就从颜色数组中去按索引取
Color curveColor = new Color();
if (Global.Instance.PrepareCompareDataInOne.Count < colors.Length)
{
curveColor = colors[index];
}
//否则要生成的曲线数量 > 颜色数组长度
else
{
//当索引达到颜色数组的长度时 索引置0
if (index >= colors.Length)
{
index = ;
}
curveColor = colors[index];
}
LineItem myCurve = myPane.AddCurve(yList[i].Title, list, curveColor, SymbolType.None);
index++;
}
其中Global.Instance.PrepareCompareDataInOne就是要生成的曲线的数据,其Count就是要生成的曲线数量。
ZedGraph怎样在生成曲线时随机生成不一样的颜色的更多相关文章
- java随机生成字符串(字符随机生成类 生成随机字符组合)
原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...
- mybatis generator自动生成代码时 只生成了insert 而没有其他的
mybatis框架提供了非常好用的逆向工程插件,但是在使用过程中会有很多问题. 我在使用中就遇到了只生成insert和insertSeletive方法,而不生成其他根据primary key查询更新删 ...
- cdm 生成pdm时, 外键的命名规则
在CDM 生成PDM时,生成的外键默认的规则是:父表名称的前三个字母+"_"+主键 为子类的外键,可是在一些情况,很不习惯用 父表的前三个字母命名,需要用自己的规则来生成外键,此时 ...
- js 随机生成姓名、手机号、身份证号、银行卡号
开发测试的时候,经常需要填写姓名.手机号.身份证号.银行卡号,既要符合格式要求.又不能重复.大家会到网上搜各种生成器.能不能自己写一个简单的生成器呢.下面是随机生成姓名.手机号.身份证号.银行卡号的j ...
- js随机生成字母数字组合的字符串 随机动画数字
效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...
- .Net (MVC) 随机生成验证码
以前一直对C#的GDI画图部分知识点不怎么用所以忘得差不多了,这两天正好公司要做一个博客系统,其中一个需求就是留言时为了防止恶意攻击必须填写验证码,正好借着这个机会复习了一下,以下是实现代码,写的比较 ...
- Java 随机生成中文姓名,手机号,邮编,住址
package lovo; import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @auth ...
- SpriteKit游戏Delve随机生成地牢地图一个Bug的修复
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Delve是一个很有意思的地牢探险类型的游戏,其中每一关的地图 ...
- PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。
Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...
随机推荐
- Linux系统入门---开机启动流程
目录 Linux系统入门---开机启动流程 一.centos6 二.systemd管理进程 1.查看级别 三.centos7实践案例: 1.案例1:centos7系统,单用户修改root密码 案例2: ...
- shell unique
由于uniq命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文本行进行排序,使重复行集中到一起 1.文本行去重 (1)排序由于uniq命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文 ...
- 【Java学习笔记】百度面试问题回顾(一)
今天回顾了部分百度面试时被问到的问题: 1.常见的包装类有哪些,他们与基本类型的区别,有哪些方法? Java语言是一个面向对象的语言,但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很 ...
- C语言之——__attribute__
__attribute__ ((packed)) 的作用就是告诉编译器取消结构在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法.这个功能是跟操作系统没关系,跟编译器有关 . __ ...
- 用List和Map排序输出
参考:java的treemap反序输出 int->string string->int java对象数组的概述 List import java.io.*; import java.uti ...
- 【Flutter学习】基本组件之基本滑动PageView组件
一,概述 PageView 是一个滑动视图列表,它也是继承至 CustomScrollView 的. 二,构造函数 类命构造函数(PageView) PageView 使用场景:创建一个可滚动列表 构 ...
- webpack配置教程
1.npm脚本运行webpack与命令行输入webpack的区别 : https://segmentfault.com/a/1190000011052193 npm 模块的 安装 和 卸载 : ...
- 线程类中使用spring注解报空指针异常
springboot项目开发中,作为服务端,实现了线程类,在此类中添加spring注解@Source注入的service,报空指针异常. 查原因后,发现是线程中,不支持spring注解,因为sprin ...
- Redis 单机模式,主从模式,哨兵模式(sentinel),集群模式(cluster),第三方模式优缺点分析
Redis 的几种常见使用方式包括: 单机模式 主从模式 哨兵模式(sentinel) 集群模式(cluster) 第三方模式 单机模式 Redis 单副本,采用单个 Redis 节点部署架构,没有备 ...
- 64位系统sql链接oracle
在SQL Server 2008中连接Oracle,完成查询.插入操作 建立指向Oracle的连接 在32位的系统中sql链接oracle,在链接服务器里点击服务器对象,右键链接服务器,选择micro ...