45

色に 16 進文字列が必要なグラフをいくつか生成しています。

例:

<dataseries name="ford" color="FF00FF" />

これらを動的に作成しているので、各データシリーズの 16 進コードをランダムに生成したいと思います。

これを行う最善の方法は何ですか?

4

6 に答える 6

13

素敵な色のセットを生成する良い方法は、固定された彩度と明るさを使用してそれらを定義し、色相を変えることです。

  1. 彩度と明るさを好きな値に設定します。たとえば、彩度 50% と明るさ 90% です。
  2. 次に、360 度の色相を必要な色の数で割ります。
  3. 色相の間隔と、固定された S と V を使用して、HSV から色を選択します。

これにより、すべてが同じ「セット」から来たように見える素敵な色のセットが得られます-すべてパステル、すべて強烈、またはすべてオフホワイトなど. Color.FromHSV() があれば、コーディングは非常に簡単です。

ただし、色が多すぎると機能しなくなる可能性がありますが、見分けがつかなくなります。しかし、とにかくその問題が発生する可能性があります。

擬似コード:

Sat = 0.5 * 255 //assuming we want range 0-255...
Brightness = 0.9 * 255
NumberOfColours = 7
HueSeparation = 360 / 7
Colors = []
for (i = 0 ; i< NumberOfColours; i++)
     Colors.Add(Color.FromHSV(HueSeparation * i, Sat, Brightness)

また

n = 7
Colors = [Color.FromHSV(x*360/n, 128, 230) for x in range(n)]

(私はリスト内包表記が好きです...)

于 2009-04-08T16:57:00.683 に答える
3

あなた (Rahkim) が Greg の投稿にコメントしたことに気付きました。彼のアイデア (彩度と値を一定に保ち、色相を変化させるだけ... 良いアイデア) をコードに入れたいということです。あなたはできる!または、むしろ、誰かがすでにあなたのために持っています!

Converting HSV to RGB color using C#に関するこのブログ投稿を見つけましたが、他にもあると確信しています。完全にランダムに色を選択するよりも、この方法の方がおそらくより良い色のスイートになるでしょう.

さらに、もちろん、この方法を使用すると、素敵な色のセットを簡単に取得できます... 色相は 0 ~ 359 になるため、色相を次のように設定することができます。

Hue = (PreviousHue + 50) % 360;

(360 に均等に入らないため、50 を選択しました。360 を超えると、すぐに色相を繰り返すことはできません。異なる色の数に応じて理想的な分離を得るには、値をいじる必要があります。期待しています。)

このようにして、未使用の「色相」スペースがまだたくさんあるときに、コードが互いに非常に近い 2 つの色をランダムに選択する場合について心配する必要はありません。

于 2009-04-08T17:26:13.593 に答える