2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 [Mathematica] Разукрашенные кривые
Сообщение22.10.2014, 22:46 
Аватара пользователя
Всем радости и счастья!

У меня есть функция, которая каждому аргументу сопосталяет некоторые значения ($n$ штук) и цвета (столько же), причём их можно разделить на две функции, но тогда считаться будет в 1.5-2 раза дольше. Для конкретности, пусть f[x_?NumericQ] возвращает {values, colors} — прямоугольную матрицу $2\times n$.

Хочется нарисовать рисунок, аналогичный Plot[First[f[x]], {x, 0, 1}], но так, чтоб каждая кривая в каждой точке имела соответствующий цвет: в точке x кривая номер k должна проходить через f[x][[1, k]] и иметь цвет f[x][[2, k]].

Я не знаю, располагает ли Plot или List(Line)Plot подобным средством. Скажем, ColorFunction позволяет разукрасить кривые, основываясь на положении (абсциссе и ординате) каждой точки, но тут цвет рассчитывает по-другому.

Или тут нужно только графическими примитивами решать задачу? Если так, то это немного печально, потому что будет много кода и не будет прелести адаптивной сетки Plot.

 
 
 
 Re: [Mathematica] Разукрашенные кривые
Сообщение22.10.2014, 23:48 
Может PlotMarkers подойдет?

Код:
points = Table[{x, Cos[x], RandomColor[]}, {x, 0., 4 Pi, Pi/15}];
ListPlot[
Partition[points[[;; , 1 ;; 2]], 2],
Frame -> True,
Axes -> False,
PlotMarkers -> (Style["\[FilledCircle]", 14, #] & /@ points[[;; , 3]])
]

 
 
 
 Re: [Mathematica] Разукрашенные кривые
Сообщение23.10.2014, 00:04 
Аватара пользователя
Врядли.
Как соеденить точки так, чтоб сама линия была окрашена в соответстующие цвета?
В идеале, цвет должен неким плавным образом переходить от точки к точке, но можно и кусочками разукрашивать. Главное, чтобы цвет самой линии менялся.

 
 
 
 Re: [Mathematica] Разукрашенные кривые
Сообщение23.10.2014, 00:45 
Еще вариант:

Код:
points = Table[{x, Cos[x], RandomColor[]}, {x, 0., 4 Pi, Pi/5}];
Plot[
Interpolation[points[[;; , 1 ;; 2]]][t],
{t, 0., 4 Pi},
Frame -> True,
Axes -> False,
MeshFunctions -> {#1 &},
Mesh -> {points[[;; , 1]]},
MeshShading -> points[[;; , 3]],
MeshStyle -> Opacity[0.]
]

 
 
 
 Re: [Mathematica] Разукрашенные кривые
Сообщение23.10.2014, 13:23 
Пусть h={values}. Зададим функцию g[{x,y}]=color для {x,y} из values. Тогда
Код:
ColorFunction -> Function[{x, y}, g[Nearest[h, {x, y}][[1]]]
должно сработать.

 
 
 
 Re: [Mathematica] Разукрашенные кривые
Сообщение23.10.2014, 23:34 
Аватара пользователя
Спасибо за предложения.

Я сейчас остановился на таком варианте:
Код:
Apply[Show,
  ListLinePlot[
    #[[All, 1 ;; 2]],
    MeshFunctions -> {#1 &},
    Mesh -> {#[[All, 1]]},
    MeshShading -> (WaveColorScheme /@ #[[All, 3]]),
    MeshStyle -> Opacity[0]] & /@ lines]
Код:
lines = Transpose@Table[{x, #1, #2} & @@@ fs[x], {x, 0, 2, 1/200}];
где fs[x] возвращает список (по числу линий) пар {value, color}.
Таким образом, я сначала дискретизую, затем каждую линию строю методом sithif и соединяю из через Show.

Хотя по-прежнему скучаю по MaxRecursion от Plot, который даже симулировать нельзя в таком подходе с дискретизацией.

 
 
 [ Сообщений: 6 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group