【问题标题】:In Mathematica. When using images as vertices in GraphPlot, how do I prevent images from overlapping?在数学。在 GraphPlot 中使用图像作为顶点时,如何防止图像重叠?
【发布时间】:2012-01-19 12:32:44
【问题描述】:

我正在使用GraphPlot 绘制大约有 100 个顶点的有向图。我通过定义 VertexRenderingFunction 将每个顶点替换为一个小的矩形或正方形图像。图像经常重叠。有没有办法让 Mathematica 将顶点间隔得更远以防止它们重叠?

我已经为“方法”尝试了各种明显的选项(“SpringElectricalEmbedding”、“SpringEmbedding”、“HighDimensionalEmbedding”、“CircularEmbedding”、“RandomEmbedding”、“LinearEmbedding”)。

trans = {1 -> 1, 2 -> 1, 3 -> 1, 4 -> 1, 5 -> 1, 6 -> 1, 7 -> 1,
8 -> 1, 9 -> 1, 10 -> 1, 11 -> 1, 12 -> 1, 13 -> 1, 14 -> 1, 
15 -> 1, 16 -> 1, 17 -> 1, 18 -> 13, 19 -> 1, 20 -> 13, 21 -> 13, 
22 -> 70, 23 -> 1, 24 -> 1, 25 -> 1, 26 -> 1, 27 -> 13, 28 -> 13, 
29 -> 1, 30 -> 13, 31 -> 13, 32 -> 1, 33 -> 19, 34 -> 70, 35 -> 70,
36 -> 1, 37 -> 1, 38 -> 1, 39 -> 39, 40 -> 13, 41 -> 2, 42 -> 13, 
43 -> 1, 44 -> 2, 45 -> 1, 46 -> 52, 47 -> 2, 48 -> 68, 49 -> 49, 
50 -> 19, 51 -> 78, 52 -> 1, 53 -> 1, 54 -> 39, 55 -> 13, 56 -> 56,
57 -> 13, 58 -> 13, 59 -> 1, 60 -> 36, 61 -> 1, 62 -> 52, 63 -> 2,
6 4 -> 68, 65 -> 19, 66 -> 56, 67 -> 4, 68 -> 76, 69 -> 19, 
70 -> 78, 71 -> 1, 72 -> 39, 73 -> 52, 74 -> 56, 75 -> 23, 
76 -> 76, 77 -> 56, 78 -> 78};

image = {{1, 0, 0, 0, 0}, {0, 1, 0, 0, 0}};

GraphPlot[trans, DirectedEdges -> True, VertexLabeling -> True,
VertexRenderingFunction -> (Inset[
ArrayPlot[image, ImageSize -> 15, Mesh -> True], #1] &)]

【问题讨论】:

  • 欢迎来到 Stackoverflow。为什么不包含您使用的代码(或其中的一些示例),以便我们检查您遇到的问题。
  • 感谢您的反馈,我正在研究您提出的一些建议。我添加了一个示例,可能有助于澄清我的问题。
  • 您是否计划为每个顶点使用相同的图像?或者某些顶点看起来会有所不同? (我有理由问)。
  • 每个顶点都有不同的图像,每个顶点代表一个 2x5 元胞自动机的状态。我有生成二进制矩阵列表的代码,每个矩阵都代表一个图像。然后 Arrayplot 函数将矩阵转换为可以包含在图中的图像。

标签: graph wolfram-mathematica


【解决方案1】:

编辑[我重新开始,基于你给出的例子]:

使用你的transimage 你可以试试:

p = ArrayPlot[image, ImageSize -> 35, Mesh -> True];

Graph[trans, DirectedEdges -> True,  VertexLabels -> Placed[p, Tooltip], 
  ImagePadding -> 10, ImageSize -> 500]

当您将鼠标悬停在每个顶点上时,图像将出现在工具提示中。如果您愿意,您可以为不同的顶点标签使用不同的图像;只需使用规则列表即可。

下图显示了它的外观(没有工具提示)。 点击link 看看它是如何与工具提示一起工作的。

【讨论】:

  • 这是一个非常巧妙的方法!之前没用过工具提示。但是我正在打印图像以放入我的论文中,希望能够一次看到所有图像。
  • 是的,工具提示不会出现在纸上。所以看起来你的图表可能需要比你最初设想的大一点。没有理由,先验,为什么不能使用整页显示带有标题的图形,对吗?在这种规模下,您当前的解决方案,通过GraphPlot 应该可以工作。如果我需要对渲染进行更多控制,我会使用 OmniGraffle Pro(适用于 Mac)或 Visio。对于一次性解决方案,这将起作用。如果您有多个具有 100 个顶点的图形,工作量将令人望而却步。
  • 我有很多这样的图表。我已经使用 ipe 编辑了很大一部分,但它非常耗时。我希望有一个通用的解决方案。缩放图形时的一个小问题是,当通过拖动图像的一角来调整图形大小时,有向边缘上的箭头大小会缩放到,并且一个或两个图像可能仍会重叠,需要进行一些手动编辑(这已经更好了) ,但如果有一个完美的解决方案,一切都会或多或少地自动发生,那就太好了。感谢您迄今为止的所有投入!我学到了一些新技巧。
猜你喜欢
  • 2019-02-14
  • 1970-01-01
  • 2021-11-09
  • 2010-12-26
  • 2014-05-26
  • 2014-10-09
  • 1970-01-01
  • 2017-09-17
  • 1970-01-01
相关资源
最近更新 更多