请选择 进入手机版 | 继续访问电脑版

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

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#问题入口 ASP.NET问题入口

【C#问题提交】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接毕业设计】 面试-葵花宝典下载

官方一群:

官方二群:

查看: 482|回复: 12

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

  [复制链接]
  • TA的每日心情
    开心
    前天 21:32
  • 签到天数: 1610 天

    [LV.Master]伴坛终老

    4251

    主题

    6177

    帖子

    11万

    积分

    管理员

    IBC编程社区-原道楠

    Rank: 9Rank: 9Rank: 9

    积分
    111382

    推广达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2019-12-26 09:07:02 | 显示全部楼层 |阅读模式

    马上加入IBC,查看更多教程

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    场景

    在利用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编程社区
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则