场景

在使用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怎样在生成曲线时随机生成不一样的颜色的更多相关文章

  1. java随机生成字符串(字符随机生成类 生成随机字符组合)

    原文:http://www.jb51.net/article/45006.htm package p2p_web; import java.util.ArrayList; import java.ut ...

  2. mybatis generator自动生成代码时 只生成了insert 而没有其他的

    mybatis框架提供了非常好用的逆向工程插件,但是在使用过程中会有很多问题. 我在使用中就遇到了只生成insert和insertSeletive方法,而不生成其他根据primary key查询更新删 ...

  3. cdm 生成pdm时, 外键的命名规则

    在CDM 生成PDM时,生成的外键默认的规则是:父表名称的前三个字母+"_"+主键 为子类的外键,可是在一些情况,很不习惯用 父表的前三个字母命名,需要用自己的规则来生成外键,此时 ...

  4. js 随机生成姓名、手机号、身份证号、银行卡号

    开发测试的时候,经常需要填写姓名.手机号.身份证号.银行卡号,既要符合格式要求.又不能重复.大家会到网上搜各种生成器.能不能自己写一个简单的生成器呢.下面是随机生成姓名.手机号.身份证号.银行卡号的j ...

  5. js随机生成字母数字组合的字符串 随机动画数字

    效果描述: 附件中只有一个index.html文件有效 其中包含css以及html两部分内容 纯js生成的几个随机数字 每次都不重复,点击按钮后再次切换 使用方法: 1.将css样式引入到你的网页中 ...

  6. .Net (MVC) 随机生成验证码

    以前一直对C#的GDI画图部分知识点不怎么用所以忘得差不多了,这两天正好公司要做一个博客系统,其中一个需求就是留言时为了防止恶意攻击必须填写验证码,正好借着这个机会复习了一下,以下是实现代码,写的比较 ...

  7. Java 随机生成中文姓名,手机号,邮编,住址

    package lovo; import java.util.HashMap; import java.util.Map; /** * 随机生成中文姓名,性别,Email,手机号,住址 * @auth ...

  8. SpriteKit游戏Delve随机生成地牢地图一个Bug的修复

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) Delve是一个很有意思的地牢探险类型的游戏,其中每一关的地图 ...

  9. PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。

    Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...

随机推荐

  1. 2018-2-22-在-windows-安装-Jekyll

    title author date CreateTime categories 在 windows 安装 Jekyll lindexi 2018-02-22 17:47:39 +0800 2018-2 ...

  2. Linux软件管理--RPM工具

    目录 Linux软件管理--RPM工具 Rpm基础概述: Rpm包安装管理 Linux软件管理--RPM工具 Rpm基础概述: RPM全称RPM Package Manager缩写,由红帽开发用于软件 ...

  3. 在eclipse中添加svn插件

    1.点击菜单栏中的help选项,然后选择Install New Software,然后点击ADD,输入: name:subclipse     url:http://subclipse.tigris. ...

  4. 第11篇Kubernetes部署微服务电商平台

        kubernetes部署sock-shop微服务电商平台: 准备条件   确保kubernetes可以访问:reg.yunwei.edu镜像库   需要准备镜像:       部署微服务   ...

  5. java中数据库和VO的一一对应关系

    如图所示,数据库中数据如果有下划线,则JavaVO中删除,除第一个单词外,其他单词首字母大写

  6. CUDA学习之二:shared_memory使用,矩阵相乘

    CUDA中使用shared_memory可以加速运算,在矩阵乘法中是一个体现. 矩阵C = A * B,正常运算时我们运用 C[i,j] = A[i,:] * B[:,j] 可以计算出结果.但是在CP ...

  7. 【机器学习实验】scikit-learn的主要模块和基本使用

    [机器学习实验]scikit-learn的主要模块和基本使用 引言 对于一些开始搞机器学习算法有害怕下手的小朋友,该如何快速入门,这让人挺挣扎的.在从事数据科学的人中,最常用的工具就是R和Python ...

  8. XML 和 HTML 之间的差异

    XML 和 HTML 为不同的目的而设计: XML 被设计用来传输和存储数据,其焦点是数据的内容. HTML 被设计用来显示数据,其焦点是数据的外观. HTML 旨在显示信息,而 XML 旨在存储和传 ...

  9. Jquery中的offset()和position()深入剖析(元素定位)

    先看看这两个方法的定义. offset(): 获取匹配元素在当前视口的相对偏移. 返回的对象包含两个整形属性:top 和 left.此方法只对可见元素有效. position(): 获取匹配元素相对父 ...

  10. 手写Spring事务框架

    Spring事务基于AOP环绕通知和异常通知 编程事务 声明事务 Spring事务底层使用编程事务+AOP进行包装的   = 声明事务 AOP应用场景:  事务 权限 参数验证 什么是AOP技术 AO ...