Как построить график плотности 2D из набора точек 2D, а также отобразить сеть, соединяющую эти вершины - PullRequest
1 голос
/ 06 февраля 2012

Моя проблема заключается в следующем.

Цель

Построение набора двухмерных точек на плоскости с функцией, используемой для определения интенсивности для каждой точки.

fun(x,y):=x+y

Плюс, у меня есть график, соединяющий эти точки.Мне нужно отобразить график на графике плотности, это определенно необходимо.

Проблема

Понятия не имею, как это сделать.Я немного искал документацию Mathematica , но не смог найти много.

Некоторые заметки

Всякий раз, когда кто-то находит решение, у меня также возникает вопрос.Как можно использовать функциональность графика на графике плотности?Например, если бы я хотел показать метки на вершинах, возможно ли иметь какое-то параметризованное решение.Возможно, мне нужно слишком много, это всего лишь небольшая заметка, пропустите ее, если это займет слишком много времени.

Заключительные замечания

Мне нужен 2D-график.Не 3D.Просто 2D это хорошо.

Ответы [ 2 ]

5 голосов
/ 06 февраля 2012

Graph имеет опцию VertexCoordinates, с помощью которой вы можете указать координаты вершин, чтобы вы могли нанести ListDensityPlot и Graph друг на друга.Например, предположим, что ваши данные имеют вид

f[x_, y_] := x + y
pts = RandomReal[1, {40, 2}];  (* xy coordinates *)
edges = Flatten[Table[{i -> Position[pts, #][[1, 1]]} & /@ 
   Rest[Nearest[pts, pts[[i]], 4]], {i, Length[pts]}]];
edges = Union[edges, SameTest -> (SameQ[#1, #2] || SameQ[#1, Reverse[#2]] &)];

Тогда вы можете сделать что-то вроде

densPlot = ListDensityPlot[{##, f[##]} & @@@ pts];
graph = Graph[Range[Length[pts]], edges,
   VertexCoordinates -> pts, 
   VertexShapeFunction -> "Square", 
   VertexSize -> 1.5, VertexLabels -> "Name", 
   EdgeStyle -> Directive[Opacity[1], White]];

Show[densPlot, graph]

Mathematica graphics

4 голосов
/ 06 февраля 2012

Вы, вероятно, хотите что-то подобное.Я создаю несколько случайных фиктивных данных для точек и ребер.

fun[x_, y_] := x + y;

points = RandomInteger[{0, 15}, {10, 2}];
edges = RandomChoice[points, {30, 2}];

Show[
  ListDensityPlot[{##, fun[##]} & @@@ points],
  Graphics[{PointSize[0.02], Point@points, Arrow /@ edges}]
]

Mathematica graphics

Если ваши ребра имеют форму правил, вы можете преобразовать их в пары списков с помощью List @@@ edges.

...