更改 igraph 图中子图的颜色

2024-03-04

我有以下代码来绘制图的最小生成树

## g is an igraph graph
mst = minimum.spanning.tree(g)
E(g)$color <- "SkyBlue2"

## how to I make mst a different color
E(g)[E(mst)]$color = "red"  ### <---- I WANT TO DO ESSENTIALLY THIS

plot(g,  edge.label=E(g)$weight)

也就是说,对于一个简单的图,我找到了 mst。我想将 mst 更改为红色并将 mst 绘制为主图的一部分。为此,我想选择的边缘g也都在mst。我该怎么做呢?


UPDATE:

更一般地说,我有一个图表g0这是最短的g, 其中有n顶点。它的构造如下

## implementing the Dijkstra-Prim algorithm
v0 = sample(1:n, 1)
g0 = graph.empty(n=n, directed=FALSE)
weight.g0 = 0
while(length(setdiff(1:n, v0) > 0)) {
  ## chose the shortest edge in the cut set of g

  ## to find the cut, figure out the set of edges where vertex is
  ## in v0 and the other is not
  cutset = E(g)[ v0 %->% setdiff(1:n, v0)]

  ## find the lightest weight edge
  cutweights = E(g)$weight[cutset]
  lightest_edge_idx = which(cutweights == min(cutweights))[1]
  weight.g0 = weight.g0 + min(cutweights)

  ## get the vertices of the lightest weight edge, add to path
  lightest_edge = cutset[as.numeric(cutset)[lightest_edge_idx]]
  vertices = get.edges(g, as.numeric(lightest_edge))

  g0 <- add.edges(g0, vertices, weight=min(cutweights))


  ## now that we have the vertices, add the one that is not in the
  ## graph already
  for(vtx in vertices) {
    if(!(vtx %in% v0)) {
      v0 = c(vtx, v0)
    }
  }

} 

我知道我可能没有使用 igraph 的很多有用功能,但我确实得到了g0成为该循环结束时的 mst。鉴于此,我有

E(g0)
Edge sequence:

[1]   8 --  1
[2]   2 --  1
[3]   9 --  8
[4]   9 --  5
[5]   3 --  2
[6]   4 --  3
[7]   7 --  3
[8]  11 --  4
[9]   7 --  6
[10] 11 -- 10
> E(g)
Edge sequence:

[1]   2 --  1
[2]   5 --  1
[3]   8 --  1
[4]   3 --  2
[5]   5 --  2
[6]   6 --  2
[7]   4 --  3
[8]   6 --  3
[9]   7 --  3
[10]  7 --  4
[11] 11 --  4
[12]  6 --  5
[13]  8 --  5
[14]  9 --  5
[15]  7 --  6
[16]  9 --  6
[17] 10 --  6
[18] 10 --  7
[19] 11 --  7
[20]  9 --  8
[21] 10 --  9
[22] 11 -- 10

我的问题是,如何为 E(g) 中也在 E(g0) 中的边分配属性?


这实际上很容易,因为minimum.spanning.tree()保留边缘属性。因此,您只需要分配一个边缘 id 属性,您就会看到哪些边缘被涂成红色。事情是这样的:

# Some test data, no edge weights, quite boring
g <- erdos.renyi.game(20,2/20)
g
# IGRAPH U--- 20 24 -- Erdos renyi (gnp) graph
# + attr: name (g/c), type (g/c), loops (g/l), p (g/n)

E(g)$id <- seq_len(ecount(g))
mst <- minimum.spanning.tree(g)
mst
# IGRAPH U--- 20 18 -- Erdos renyi (gnp) graph
# + attr: name (g/c), type (g/c), loops (g/l), p (g/n), id (e/n)
E(mst)$id
# [1]  1  2  3  6  7  8  9 10 11 12 13 16 18 19 20 22 23 24

E(g)$color <- "black"
E(g)$color[E(mst)$id] <- "red"
plot(g)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

更改 igraph 图中子图的颜色 的相关文章

随机推荐

  • Tensorflow 2 抛出 ValueError:as_list() 未在未知 TensorShape 上定义

    我正在尝试在 Tensorflow 2 0 中训练 Unet 模型 该模型将图像和分割掩模作为输入 但我得到了ValueError as list is not defined on an unknown TensorShape 堆栈跟踪显
  • 带有 ActionCable 的 Rails 5 应用程序可以部署在 Windows 上吗?

    我有一个 Rails 5 应用程序 我计划将其部署在 Linux 上 但由于我们需要一些访问非常特定的仅限 Windows 的软件 因此我需要将其部署在 Windows Server 2012 R2 上 我的软件堆栈 或组合 应该是 Ngi
  • Scala 中的调试日志不会影响性能

    在 C C Objective C 等语言中 通常使用预处理器宏来定义日志记录机制 这些机制甚至不会为发布的二进制文件进行编译 因此不会造成性能影响 大致如下 ifdef DEBUG printf some event we want to
  • python 中的对象初始值设定项语法(c#)?

    我想知道是否有一种快速的方法来初始化Python中的对象 例如 在 c 中 您可以实例化一个对象并设置字段 属性 例如 SomeClass myObject new SomeClass variableX value variableY 1
  • 从 ASP.NET MVC Lambda 表达式获取价值

    我正在尝试创建自己的 HTML 帮助器 它接受一个表达式 类似于内置的 LabelFor 帮助器 我找到了当表达式与此类似时获取属性值的示例 model gt model Forename 但是 在我的一些模型中 我想获取子元素中的属性 例
  • Python 电子邮件 PDF:某些 PDF 已损坏

    我正在尝试将 PDF 文件附加到电子邮件中 对于一个 PDF 打印为 PDF 的 Word 文档 它可以工作 收件人在 Outlook 中打开它没有问题 然而 对于其他 PDF 除了大了几 KB 之外 它们看起来都一样 它们会被损坏 是一个
  • Android - 解决 ACCESS_CONTENT_PROVIDERS_EXTERNALLY 权限?

    我正在构建一个应用程序 它给出了这个异常 因为我调用了一些内部方法 权限拒绝 没有从 pid 2520 uid 10047 调用 getContentProviderExternal 的权限 需要 android permission AC
  • WTSEnumerateSessions 挂起并且永不返回

    我有一个用 C 编写的 Net 服务 我正在调用WTSEnumerateSessions 会话检查由计时器每 15 分钟运行一次 它列出所有会话并将用户名 域组合与预定义的用户集进行比较 以确定他们是否登录到服务器 问题在于几个服务器的调用
  • C# 程序运行时初始形式不可用

    我在让程序中的主窗体按我想要的方式运行时遇到问题 我正在使用 C 在我的初始主窗体 Form1 上 我有一个运行长程序的命令按钮 在程序中间 我希望用户能够返回到初始表单并单击一些新的复选框 我将从 C 程序中将其放置在该初始表单上 下面的
  • Telegram 中的“Simple PUSH”事件如何运作?

    The 用于订阅 Telegram API 中的 PUSH 基础设施的文档 https core telegram org method account registerDevice非常缺乏 因为主要是专注于移动平台 https core
  • Cakephp - 如何使错误页面有自己的布局?

    我想要为未找到 404 页面使用不同的布局 我如何为该页面设置不同的布局 IRC 的专家帮助了我 他建议使用beforeRender 在应用程序控制器中 Before Render function beforeRender if this
  • 未将 Win32 可移植可执行映像映射到偏移量 0 处的可能原因有哪些?

    我最近一直在研究 Window 的 PE 格式 我注意到在大多数示例中 人们倾向于设定ImageBase中的偏移值optional header到一些不合理的高的东西 比如0x400000 什么可能使它不利not在偏移处映射图像0x0 首先
  • Files.walkFileTree中的遍历顺序

    顺序是什么Files walkFileTree访问同一级别的文件 目录 它似乎没有按大小 上次修改时间或名称的顺序访问它们 我在其中找不到任何内容API文档 http docs oracle com javase 7 docs api ja
  • 如何在 MiniTest 中存根?

    在我的测试中 我想为类的任何实例存根一个预设的响应 它可能看起来像这样 Book stubs title any instance returns War and Peace 然后每当我打电话时 book title它返回 战争与和平 有没
  • 如何更新TileOverlay而不闪烁?

    我有一些动态图块内容要显示在地图顶部 具体来说 天气图像 雷达 卫星 温度等 我正在使用适用于 Android v2 的 Google 地图 API 我遇到的问题是 显然更新图块图像的唯一方法 即当新数据到达时 或者当帧在延时动画中前进时
  • 使用 LoadLibrary 在 .pyd 中加载 cython cdef 函数时出现问题

    我正在尝试在 C 中动态加载 cythonized pyd 在 Linux 机器中创建一个 so 文件 使用 so 我可以执行以下操作 plugin dlopen foo so RTLD LAZY init dlsym plugin PyI
  • 调试 Jersey 解组错误 - 错误请求语法不正确

    我正在 Glassfish 上的 Jersey 的帮助下构建 REST Web 服务 现在我正在为我的搜索查询的自定义输入源而苦苦挣扎 如果有搜索方法 POST Path search Consumes application xml ap
  • HSTS 预加载列表 - www 网站可能存在 SEO 问题

    让我在这里解释一下现实世界的情况 我运行网站https www liloo ro https www liloo ro我想为其启用 HSTS HSTS 预加载 问题是为了将其提交给预加载列表 https hstspreload org th
  • 无法制作固定大小数组的向量?

    我有这个奇怪的问题 vector
  • 更改 igraph 图中子图的颜色

    我有以下代码来绘制图的最小生成树 g is an igraph graph mst minimum spanning tree g E g color lt SkyBlue2 how to I make mst a different co