如何从一组2D点绘制2D密度图并显示连接这些顶点的网络

时间:2012-02-06 08:39:18

标签: wolfram-mathematica mathematica-8

我的问题如下。

目标

在平面上绘制一组2D点,其具有用于为每个点提供强度的函数。

fun(x,y):=x+y

另外,我有一个连接这些点的图表。我需要在密度图上显示图表,这绝对是必要的。

问题

不知道怎么做。我搜索了一下 Mathematica 文档,但我找不到多少。

一些注释

每当有人找到解决方案时,我也有一个问题。如何在密度图上使用图形功能是不可能的?例如,如果我想在顶点上显示标签,是否可以使用某种参数化解决方案。也许我要求太多,这只是一个小小的注意事项,如果花费太多时间就跳过它。

最后的笔记

我需要2D图表。不是3D的。只是2D很好。

2 个答案:

答案 0 :(得分:5)

Graph有一个选项VertexCoordinates,您可以使用该选项指定顶点的坐标,这样您就可以将ListDensityPlotGraph相互叠加。例如,假设您的数据类似于

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

答案 1 :(得分:4)

你可能想要这样的东西。我正在为点和边创建一些随机的虚拟数据。

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的列表对。