Условное окрашивание с использованием графики в Mathematica - PullRequest
3 голосов
/ 05 июля 2011

Пожалуйста, примите во внимание:

dalist = {{1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}, {5, 5, 5}, 
          {1, 2, 1}, {2, 3, 1}, {3, 4, 1}, {4, 5, 1}, {5, 6, 1}}

Я использую следующее для построения вышеупомянутого, где #2 & #3 - координаты x & y

Graphics@MapThread[Point[{#2, #3}] &, Transpose@dalist]

enter image description here

  • #1 временная привязка I хотел бы использовать, чтобы покрасить точек.

  • Он может варьироваться от 1 до 30 в моих данных.

  • #1 =1 всегда должны уступать того же цвета.

РЕДАКТИРОВАТЬ: на основе решений ниже

  • Как я могу установить цветовой диапазон / градиент вручную или использовать существующий ("BlackBodySpectrum")?

Ответы [ 3 ]

2 голосов
/ 05 июля 2011

Попробуйте:

datlist = Flatten[Table[{i, j + i, j}, {i, 1, 20}, {j, 1, 20}], 1];
colordata = 60; (* Try different palettes 1 .. 62 *)

Graphics[(Sequence @@ 
     {Directive[ 
      ColorData[colordata][Mod[#[[1]], ColorData[colordata, "Range"][[2]]]]], 
     PointSize -> Large, Point[{#[[2]], #[[3]]}]} & /@ datlist), 
     Frame -> True]

enter image description here

Редактировать

Использование BlackBodySpectrum:

datlist = Flatten[Table[{i, j + i, j}, {i, 1, 20}, {j, 1, 20}], 1];
colordata = "BlackBodySpectrum";(*Try different palettes 1.. 62*)
Graphics[(
  Sequence @@ {Directive[
       ColorData[
         colordata][#[[1]] ColorData[colordata, 
            "Range"][[2]]/(Length@datlist/
            Length@Select[datlist, #[[1]] == 1 &])]], 
      PointSize -> Large, Point[{#[[2]], #[[3]]}]} & /@ datlist), 
 Frame -> True]

enter image description here

2 голосов
/ 06 июля 2011

Нет необходимости в MapThread

Graphics[{PointSize -> 0.05, {ColorData[1][#1], Point[{#2, #3}]} & @@@dalist}]

enter image description here

Вы можете свернуть свои собственные градиенты изображения, используя Blend:

Graphics[{PointSize -> 0.05, 
         {Blend[{Red, Yellow, Blue}, #1/5], Point[{#2, #3}]} & @@@ dalist}]

Обратите внимание, что вынеобходимо позаботиться о том, чтобы масштабировать диапазон данных таким образом, чтобы максимальное значение генерировало 1, а минимальное 0 (если вы хотите оптимально использовать доступный диапазон)

enter image description here

2 голосов
/ 05 июля 2011

Вы можете использовать ColorData:

Graphics@MapThread[{ColorData[1][#1], Point[{#2, #3}]} &, 
  Transpose@dalist]
...