马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

ZedGraph怎样在生成曲线时随机生成不一样的颜色

  [复制链接]
查看3313 | 回复17 | 2019-12-26 09:07:02 | 显示全部楼层 |阅读模式

场景

在利用ZedGraph天生多条曲线时为了能区分曲线颜色,要求随机设置曲线颜色。

起首从System.Drawing.Color中获取全部颜色的对象的数组,然后将其序次打乱随机排序,然后在天生曲线时从Color数组中取Color并赋值。

效果

090948z0wcgngtzjiyn0gj.gif

注:

博客主页:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的步伐猿
获取编程相关电子书、教程推送与免费下载。

实现

单纯天生曲线的代码

  1. LineItem myCurve = myPane.AddCurve(yList[i].Title, list, curveColor, SymbolType.None);
复制代码

第一个参数:图例标题

第二个参数:坐标点的list

第三个参数:颜色Color对象

第四个参数:曲线节点符号

以是在天生曲线时就要在第三个参数上进行修改

起首获取Color的全部颜色对象

  1. //用于存取取出的颜色对象
  2. List<Color> colorList = new List<Color>();
  3. //通过GetMember获取全部的公共成员
  4. foreach (var item in typeof(Color).GetMembers())
  5. {
  6. //只取属性且为属性中的已知Color,剔除byte属性以及一些布尔属性等(A B G R IsKnownColor Name等)
  7. if (item.MemberType == System.Reflection.MemberTypes.Property && System.Drawing.Color.FromName
  8. (item.Name).IsKnownColor == true)
  9. {
  10. Color color = System.Drawing.Color.FromName(item.Name);
  11. colorList.Add(color);
  12. }
  13. }
  14. //转成数组
  15. Color[] colors = colorList.ToArray();
复制代码

然后将Color数组的序次进行打乱

  1. colors = GetDisruptedItems(colors);
复制代码

调用乱序方法

  1. private static Color[] GetDisruptedItems(Color[] colors)
  2. {
  3. //天生一个新数组:用于在之上盘算和返回
  4. Color[] temp;
  5. temp = new Color[colors.Length];
  6. for (int i = 0; i < temp.Length; i++)
  7. {
  8. temp[i] = colors[i];
  9. }
  10. //打乱数组中元素序次
  11. Random rand = new Random(DateTime.Now.Millisecond);
  12. for (int i = 0; i < temp.Length; i++)
  13. {
  14. int x, y; Color t;
  15. x = rand.Next(0, temp.Length);
  16. do
  17. {
  18. y = rand.Next(0, temp.Length);
  19. } while (y == x);
  20. t = temp[x];
  21. temp[x] = temp[y];
  22. temp[y] = t;
  23. }
  24. return temp;
  25. }
复制代码

然后在循环天生曲线时,循环条件为要天生的曲线数量与颜色数组的长度进行对比判断。

  1. int index = 0;
  2. //循环添加曲线
  3. foreach(DataTreeNode node in Global.Instance.PrepareCompareDataInOne)
  4. {
  5. list = SetCurveTextInOne(yList[i].TitleKey,record);
  6. //假如要天生的曲线数量 < 颜色数组长度 那么就从颜色数组中去按索引取
  7. Color curveColor = new Color();
  8. if (Global.Instance.PrepareCompareDataInOne.Count < colors.Length)
  9. {
  10. curveColor = colors[index];
  11. }
  12. //否则要天生的曲线数量 > 颜色数组长度
  13. else
  14. {
  15. //当索引到达颜色数组的长度时 索引置0
  16. if (index >= colors.Length)
  17. {
  18. index = 0;
  19. }
  20. curveColor = colors[index];
  21. }
  22. LineItem myCurve = myPane.AddCurve(yList[i].Title, list, curveColor, SymbolType.None);
  23. index++;
  24. }
复制代码

此中Global.Instance.PrepareCompareDataInOne就是要天生的曲线的数据,其Count就是要天生的曲线数量。

C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则