ibcadmin 发表于 2019-12-26 09:07:02

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

<h1>场景</h1>
<p>在利用ZedGraph天生多条曲线时为了能区分曲线颜色,要求随机设置曲线颜色。</p>
<p>起首从System.Drawing.Color中获取全部颜色的对象的数组,然后将其序次打乱随机排序,然后在天生曲线时从Color数组中取Color并赋值。</p>
<h2>效果</h2>
<p></p>
<p> </p>
<p> </p>
<p>注:</p>
<p>博客主页: <br /><a href="https://blog.csdn.net/badao_liumang_qizhi">https://blog.csdn.net/badao_liumang_qizhi
</a><br />关注公众号 <br />霸道的步伐猿 <br />获取编程相关电子书、教程推送与免费下载。 </p>
<h1>实现</h1>
<p>单纯天生曲线的代码</p>

LineItem myCurve = myPane.AddCurve(yList.Title, list, curveColor, SymbolType.None);

<p>第一个参数:图例标题</p>
<p>第二个参数:坐标点的list</p>
<p>第三个参数:颜色Color对象</p>
<p>第四个参数:曲线节点符号</p>
<p>以是在天生曲线时就要在第三个参数上进行修改</p>
<p>起首获取Color的全部颜色对象</p>

//用于存取取出的颜色对象
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();

<p> </p>
<p>然后将Color数组的序次进行打乱</p>

colors = GetDisruptedItems(colors);

<p> </p>
<p>调用乱序方法 </p>

private static Color[] GetDisruptedItems(Color[] colors)
      {
            //天生一个新数组:用于在之上盘算和返回
            Color[] temp;
            temp = new Color;
            for (int i = 0; i < temp.Length; i++)
            {
                temp = colors;
            }

            //打乱数组中元素序次
            Random rand = new Random(DateTime.Now.Millisecond);
            for (int i = 0; i < temp.Length; i++)
            {
                int x, y; Color t;
                x = rand.Next(0, temp.Length);
                do
                {
                  y = rand.Next(0, temp.Length);
                } while (y == x);

                t = temp;
                temp = temp;
                temp = t;
            }

            return temp;

      }

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

int index = 0;
//循环添加曲线
foreach(DataTreeNode node in Global.Instance.PrepareCompareDataInOne)
      {
         
         list = SetCurveTextInOne(yList.TitleKey,record);
         //假如要天生的曲线数量 < 颜色数组长度 那么就从颜色数组中去按索引取
         Color curveColor = new Color();
         if (Global.Instance.PrepareCompareDataInOne.Count < colors.Length)
               {
                  curveColor = colors;
                }
         //否则要天生的曲线数量 > 颜色数组长度
         else
                {
                  //当索引到达颜色数组的长度时 索引置0
                  if (index >= colors.Length)
                     {
                           index = 0;
                        }
                  curveColor = colors;
                }
            LineItem myCurve = myPane.AddCurve(yList.Title, list, curveColor, SymbolType.None);
            index++;
}

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

</p>
页: [1]
查看完整版本: ZedGraph怎样在生成曲线时随机生成不一样的颜色