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之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ... 
随机推荐
- 轻量级Spring定时任务(Spring-task)
			Spring3.0以后自主开发的定时任务工具,spring-task,可以将它比作一个轻量级的Quartz,而且使用起来很简单,除spring相关的包外不需要额外的包,而且支持注解和配置文件两种形式. ... 
- Linux中各类程序的配置文件位置
			目录 Linux中各类程序的配置文件位置 1.启动引导程序配置文件 2.系统启动文件核脚本 3.网络配置文件 4.超级服务程序配置文件和目录 5.硬件配置 6.硬件访问文件 7.扫描仪配置文件 8.打 ... 
- gene network analysis
			基因表达分析包括3个层次[68], 首先是单基因水平, 即比较对照组与实验组的每个基因是否存在表达差异, 这主要指差异基因表达分析; 其次是多基因水平, 如按照基因的共同功能.相互作用.共同表达等 ... 
- java基础学习笔记三(多态)
			多态? 多态是同一个行为具有多个不同表现形式或形态的能力. 存在的必要条件 继承 重写 父类引用指向子类对象 比如: Parent p = new Child(); 当使用多态方式调用方法时,首先检查 ... 
- 服务化改造的云上利器 | 阿里云 EDAS 重大升级发布
			11月22日,广东云栖大会企业级互联网架构专场上,阿里云发布了全新版本的企业级分布式应用服务EDAS. 新版本增强了对主流微服务框架的原生支持,实现SpringCloud & Dubbo用户代 ... 
- axios拦截设置和错误处理
			目前想出的处理接口请求进行全局错误提示 的最佳方案,axios整体配置如下 1.基于axiso.interceptors进行响应拦截: 主要负责全局提示错误 axios.interceptors.re ... 
- 说下vue工程中代理配置proxy
			这个代理配置不需要后台进行ngnix代理跳转了,前端可以做.在vue.config.js文件中进行配置,如下: module.exports = { publicPath: process.env.V ... 
- 双目立体匹配经典算法之Semi-Global Matching(SGM)概述:匹配代价计算之互信息(Mutual Information,MI)
			半全局立体匹配算法Semi-Global Matching,SGM由学者Hirschmüller在2005年所提出1,提出的背景是一方面高效率的局部算法由于所基于的局部窗口视差相同的假设在很多情况 ... 
- php开发面试题---php 对swoole的理解
			php开发面试题---php 对swoole的理解 一.总结 一句话总结: 以战养学,实例驱动 swoole是披着PHP外衣的C程序:其实就是c.java那些语言里面的高阶功能:比如 持久连接.异步通 ... 
- 12. MySQL简单使用
			关于MySQL的使用,大家可以去网上看相关教程,但是为了保证阅读的连贯性,这里会做简单介绍. 创建数据库 我们双击刚刚新建的数据库,然后双击mysql,点击新建查询,可以在编辑器里面输入一些mysql ... 
