问题标签 [tidygraph]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
311 浏览

r - Tidygraph:获取沿最短路径的节点序列

我想使用tidygraph获取两个节点之间最短路径的节点序列。考虑这个例子。

输出显示节点ABCD位于最短路径上,但未显示节点序列为B -> A -> D -> C。返回的边缘数据也不显示边缘的顺序。

我知道我可以用 igraph 完成这样的任务。

然而,由于几个原因,这是不优雅的。

  • 我正在寻找一种不求助于其他软件包的 tidygraph 解决方案。
  • 导出 tidygraph 边缘数据时,节点数据列node_id中包含的信息丢失了,所以我必须手动进行映射“B”->“2”,“C”->“3”,或者编写更精细的代码加入来自节点和边缘数据的信息。
  • 我希望输出是"B" "A" "D" "C",不是2 1 4 3

有没有一些直接的方法可以直接用tidygraph获取最短路径上的节点序列?

0 投票
1 回答
287 浏览

r - 在 r 中使用 sfnetwork 的点之间所有边的组 ID

我有一个带有空间显式边缘 ( ln_sfnetwork) 的有根树,以及通过添加点层 ( ) 创建的附加边缘pt

我想为网络上每个点之间的所有边赋予相同的 ID,这样我就可以计算点之间网络的总长度。我有一个手动解决方案,但这必须使用 > 20,000 点的大型数据集来完成。

使它成为一个 sfnetwork

添加点几何

通过本质上拆分 sfnetwork 使用点几何创建新边

用于对节点之间的所有边进行分组的手动位pt。这将出现在点之间的所有边缘分组。

期望的输出

所需的输出,其中 new_river_id 对于点之间的所有边都相同

然后group_by得到组合长度

最后

0 投票
1 回答
150 浏览

r - 如何使用 sf 和 tidygraph 在 R 中的空间网络之后导出 SHP 文件

我曾使用 OSM 数据库中的中心性计算。我按照说明(链接)。

但是,我想导出带有中心值的街道网络的 shapefile。我是 R 新手。所以我不确定哪个部分用作要导出的对象。

我尝试了2种方法

  1. 写OGR

    那么它总是显示 SRI Shapefile") : inherits(obj, "Spatial") is not TRUE

  2. st_write

-------------------------------- 代码我将从这部分开始----

我想导出这张地图的 shapefile:

在此处输入图像描述

0 投票
1 回答
135 浏览

r - 在线性 ggraph arcplot 中控制圆弧位置(向上或向下)

背景

我有一个节点和边网络,我想将其可视化为线性弧图。根据我有限的知识,我相信这{ggraph}是一个很好的工具(特别是考虑到我对 的熟悉{ggplot2})所以这就是我在这里尝试的,但如果有一个引人注目的替代方案,我愿意接受。

问题

我知道它可以在节点线上方渲染弧线(如下面的示例所示),但有时也可以在下方渲染它们。看起来这可以由strength参数控制。当我将弧线放在strength外面时aes(例如strength = -1将它们全部向下翻转),这有效,但Ignoring unknown aesthetics: strength在内部应用时会发出警告aes,如下所示。

目前的努力

下面是一个简单的例子来说明我到目前为止所尝试的内容和结果图。我搜索了 StackOverflow 和 ggraph 文档,但似乎无法在那里找到答案。我也尝试了这些变体geom_edge_arc2geom_edge_arc0但没有成功。作为一种解决方法,我可以制作一个值向量来提供给strengthoutside aes,但理想情况下,我可以aes使用已经提供给函数的数据在内部做一些事情。我是否误解了预期的语法或过于挑剔?

期望的输出

我希望能够控制每个弧的方向(上方或下方)。例如,上方的蓝色弧线和下方的红色弧线基于edge_width(ie strength = sign(edge_width)) 的符号。


reprex 包于 2021-02-26 创建(v1.0.0)


会话信息

万一这很重要:

reprex 包于 2021-02-26 创建(v1.0.0)

0 投票
0 回答
45 浏览

r - 使用tidygraph计算子节点值的累积和...更快

我正在使用 tidygraph 来处理组织结构图数据。我正在尝试执行的一项计算是总结每个直线经理的直接直接下属的数量,以及他们所坐的报告的总数(累积)。

我使用了这个问题的答案中提供的代码版本:(Tidygraph:在父级别计算子摘要)并且它完全按照它应该的方式工作。

但是,我的数据集大约有 28,000 条记录,这段代码需要大约一个小时才能执行,感觉太长了。

相比之下,这段计算节点总数的代码在 28,000 条记录中花费了大约 20 秒:

请问有人对如何加快这些相当简单的计算有建议吗?

更新:我已经为此工作了几个小时。从这里借一些代码(https://chapmandu2.github.io/orgsurveyr_docs/articles/organisations_with_ggraph.html#simulate-the-people-in-the-organisation)给了我以下方法,它完成了对 40,000 个模拟记录的计算1-2分钟。更好的...

0 投票
1 回答
63 浏览

r - 指定哪个节点是简单 sfnetworks 中的根节点

我有一个具有空间显式边的有根树,它只包含一个边和两个节点。

数据

当我检查哪个节点时,node_is_root()我发现它是第一个节点。

有没有可能反过来呢?

期望的输出

注意:模式必须"in"在调用图上的st_network_path()st_network_cost()等其他函数时使用,因为每个节点都代表河流的源头或河口,因此如果在"out"只有一条边的情况下切换到模式,结果将不正确。

0 投票
0 回答
29 浏览

r - 这种网络交互数据结构如何用于 ggraph 中的网络可视化?

我想使用以下数据使用 ggraph R 包生成无向网络可视化,但我不知道如何将数据整理/重塑为可以使用的格式。

这是一些示例输出数据,类似于我在真实数据上使用的蛋白质序列聚类算法的输出。数据结构不是一个整洁的结构。

这是数据的样子:

网络可视化应产生 4 个离散集群,其中由文本字符串表示的节点相互连接。第 4 个集群中的节点只能连接到自身。

我从 ggraph 文档中读到我应该使用该as_tbl_graph()函数来制作一个整洁的格式网络对象,但是我无法成功地使用这个函数从这个数据格式中制作一个整洁的图形对象。

0 投票
1 回答
34 浏览

r - 根据 R / ggraph 中的 'y' 值垂直组织图节点

我创建了这个小包来组织“家庭”数据,希望使用 ggraph/tidygraph 创建家谱树。我设法获得了这样的图表(可以在没有包的情况下加载数据 - 参见最后的代码):

reprex 包(v0.2.1)于 2021-04-15 创建

然而,图表并不是最清晰的可视化,看起来更像树或树状图的东西会更好。

我相信其中一种方法(或至少是第一步)是根据人们的出生日期来组织节点(birth_year可作为节点的属性)。

换句话说,我想在这个图中隐含一个“y”轴,并将节点放在它们的高度,这取决于它们的一些属性。那可能吗?

不安装包的数据

0 投票
2 回答
318 浏览

r - 查找 DAG 中节点值的累积和

假设我有以下有向无环图 (DAG),每个节点的权重为 1。

简单的有向无环图

我有兴趣根据其祖先的值计算每个节点的累积总和。假设如我之前所说,每个节点的权重为 1,那么这就是我期望得到的

每个节点的累积总和

这就是我试图做的:

reprex 包于 2021-05-13 创建 (v2.0.0 )

可以看到,D的累加和结果是3而不是4,因为D的值应该是A和B的累加值之和。我不明白为什么D不加4

我试图理解这里给出的解决方案,但很难理解它

我怎样才能得到累积的金额?

更新#1

我(暂时)不关心算法的复杂性,也就是说,如果算法在 O(V + E) 中执行它,它是不相关的。

这个问题中提到的一个重要的事情是关于两次计数的问题,即A的值的部分和等于C(1) + A(1) = 2,而A的值的部分和B 等于 C(1) + B (1) = 2,所以说 D 的值不等于 A (2) + B(2) 的部分和,因为 C 的值将重复 I认为它不适用于这种情况,原因如下:

假设这 4 个节点(A、B、C 和 D)中的每一个都是互联网节点,每个节点产生 1 美元的收入,因此 4 个节点的总累计收入为 4 美元。如果 D 是其余节点的收敛节点,那么在 D 停止工作的情况下,其余节点和 D 的收益将不再可能,因此,它的价值是 4 美元。

更新#2

如果我添加从 C 到 D 的新路径,则 D 的值应该始终为 4,因为依赖节点的数量保持不变,也就是说,重要的是累加和中依赖节点的数量。例如,在@ThomasIsCoding 提出的解决方案中,如果我添加这个新路径,D 的值现在是 5,我认为部分原因是他们的算法使用度数作为参数来计算累积和,但是,如果我添加一个附加节点,则计算正确。

更新#3

我放置的示例很简单,目的是易于理解目标,但是,我没有指定它应该适用于具有许多具有三种不同拓扑结构的节点的图。最外层是树,中间层是环,最内层是全网格。

0 投票
2 回答
200 浏览

r - 使用 tidygraph 计算每个节点的给定类型的边

目标:我想计算每个节点的部分类型的传入边数。我怎样才能做到这一点?

标准:

  • 我需要使用 R 包 tidygraph
  • 允许我通过 magrittr 管道改变现有图的答案更好
  • 更少的代码行更好

以下代码将生成一个示例图

理想的输出,当搜索(例如)传入的 g 边缘时,如果类型“a”看起来像:

编辑:添加了一个数字以使问题更加具体。

我们如何计算每个节点的 a 类型的传入链接?