我的问题如下。
在平面上绘制一组2D点,其具有用于为每个点提供强度的函数。
fun(x,y):=x+y
另外,我有一个连接这些点的图表。我需要在密度图上显示图表,这绝对是必要的。
不知道怎么做。我搜索了一下 Mathematica 文档,但我找不到多少。
每当有人找到解决方案时,我也有一个问题。如何在密度图上使用图形功能是不可能的?例如,如果我想在顶点上显示标签,是否可以使用某种参数化解决方案。也许我要求太多,这只是一个小小的注意事项,如果花费太多时间就跳过它。
我需要2D图表。不是3D的。只是2D很好。
答案 0 :(得分:5)
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]
答案 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}]
]
如果您的边缘采用规则的形式,则可以将它们转换为List @@@ edges
的列表对。