问题标签 [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.
r - ggraph 中的选择性颜色/大小节点
我正在使用 tidygraph 和 ggraph 来绘制网络。有没有办法选择性地操纵节点?具体来说,尺寸和颜色,分别。
r - 在 r 中创建圆形/同心二部图
已解决:查看我的解决方案,添加在帖子底部。
我目前正在尝试使用 r 创建一个圆形二分图,最好使用 ggraph。我有一个雄性和雌性青蛙交配关系的数据集;这是该数据的一个子集:
我的目标是可视化每个有机体拥有的伙伴数量,如下所示:
到目前为止,我已经能够使用 igraph 制作图形的线性版本:
产生这个: 线性二分图显示母亲和父亲之间的交配关系;由于标签重叠,非常纠结且难以阅读
我坚持将其转换为圆形可视化。我尝试过的两件事是:
首先,将 igraph 对象带入 ggraph 并使用“圆形”布局进行绘制:
但是我得到的不是两个同心环,而是一个大圆圈,这对于显示数据没有用(我知道,通过 ggraph 可以更简单地完成)。
其次,我尝试将 igraph 对象带入 ggraph 并将循环设置为 TRUE:
但我收到错误消息:
关于如何产生我正在寻找的可视化的任何想法?我对 r 和 stackoverflow 都很陌生,所以对于对我的问题的解释有任何限制,我深表歉意。谢谢!
解决方案:
首先,加载您需要的包。
library(tidyverse)
library(tidygraph)
library(igraph)
library(ggraph)
现在,读入你的节点和边数据,并用 ggraph 构造图形对象。
Nodes <- read_csv("Nodes.csv")
Edges <- read_csv("Edges.csv")
Graph <- tbl_graph(nodes = Nodes, edges = Edges)
接下来,使用二分布局创建一个表示您的图形的对象。
g <- Graph
V(g)$type <- bipartite_mapping(g)$type
基于该二分图对象,我们将找到将节点排列成同心圆的每个节点的 x 和 y 坐标。首先,使用 create_layout 创建一个对象“coords”,它描述了当前的二分布局。coords 包含线性二分图中每个节点的 x 和 y 坐标列。
coords <- create_layout(g, layout = "bipartite") %>%
接下来,我们将使用一些三角函数将 x 和 y 坐标从线性二部图的坐标更改为描述圆形图的 x 和 y 坐标。首先,选择 x 和 y 列。
select(x, y) %>%
这条线创建了一个列,“theta”,它基本上根据我们需要沿圆边缘放置的节点数将单位圆划分为多个切片,并为每个节点分配一个切片。
mutate(theta = x / (max(x) + 1) * 2 * pi,
接下来的行创建 r 值,节点将被放置的圆的半径,并在笛卡尔平面上找到 x 和 y 坐标,该平面将沿着圆的边缘放置每个节点。
r = y + 1,
x = r * cos(theta),
y = r * sin(theta))
现在我们创建一个全新的图形布局,它根据我们刚刚在坐标中创建的那些圆坐标给出节点位置。
my_graph <- create_layout(g, "manual", node.position = coords)
我还想确保每个节点的标签以逻辑方式旋转,以便没有标签重叠并且所有标签都易于阅读。为此,首先根据“坐标”创建一个名为“label_data”的对象。
label_data <- coords
通过将 theta 列从弧度转换为度数,向 label_data 添加一个新列,称为“角度”。
label_data$angle <- (label_data$theta)*(180/pi)
如果我们只使用这个角度值,那么圆的第三和第四象限中的标签就会颠倒过来。因此,我们将这些区域的角度值转换为将它们正面朝上翻转。
label_data$plottingangle<-ifelse(label_data$angle < 270 & label_data$angle > 90, label_data$angle - 180, label_data$angle)
最后,我们只绘制具有我们创建的布局的图形对象,指定 geom_node_text 美学中标签的旋转角度。多田!
ggraph(my_graph) + geom_edge_link(edge_colour = "gray73") + geom_node_point(size = 0.8) + geom_node_text(aes(label = IndividualID, angle = label_data$plottingangle), size = 3) + scale_shape_manual(values = c(0, 19)) + coord_fixed() + theme_graph()
r - 如何让树节点在 tree.map 中正确嵌套
我在从父/子分组对构建 tree.map 时遇到问题。这是我的示例数据:
我尝试使用以下方法构建树tree.map
:
结果是:
我希望结果将父母与孩子联系起来,如下所示:
r - 在tidygraph中过滤
考虑这个简单的例子
我知道我可以filter
用来轻松过滤节点或边缘。
我的问题是如何根据边缘上的条件过滤节点。
例如运行:
mygraph %>% activate(edges) %>% filter(power == 3)
仍然会返回所有节点,这在绘图时很烦人(这些节点将没有边!)。
如何保留与过滤后的边集连接的所有节点?
r - 由 tidygraph 计算的无向网络图显示的度中心性超出了应有的范围
我有一个包含 26 个节点的清理数据集。我使用 tidygraph 将这 26 个节点放置在一个无向网络图中,我使用该centrality_degree()
函数来计算中心度。但是,当我绘制结果网络时,我可能的最高中心度为 40,这应该是不可能的。当我将图表更改为有向图时,这已得到纠正。
我有点困惑,作为我过去使用的其他方法,我手动计算中心度,我从未遇到过这个问题。
这是常规行为,还是我做错了什么?
可重现的例子:
r - 如何修复 tidygraph 中的“不应直接调用函数”错误?
问题是当我尝试应用 dplyr::mutate 函数以获得网络图列表的一些中心性度量时,通过它们进行迭代。我正在使用 tidygraph。
如果我对列表中的一个网络进行子集化,则代码运行良好,我的问题是当我尝试对整个列表执行此操作时。因此,在迭代 tbl 图时,它可能与 MAP 或 LAPPLY 函数有关。
到目前为止,我尝试过许多不同的映射功能,例如 map、lmap、lapply、sapply、modify 等,都会收到此错误消息。
谢谢!
r - 如何根据节点社区对边缘进行着色?
如何将颜色信息添加到 tbl_graph 的边缘?我想根据“to”和“from”节点的颜色为边缘着色:如果两个节点具有相同的颜色,那么它们之间的边缘应该具有相同的颜色。
r - R ggraph 在指定 facet_edges 时删除隔离
我正在用这个tidygraph
包做一些探索性的网络分析。我正在尝试使用ggraph
包生成带有我的数据的多面图。我创建了 2 个不同的tbl_graph
对象,我使用该bind_graphs
函数将它们绑定在一起。
我正在使用的代码是:
尽管有大量警告,但我仍然获得了多面图。但是,尽管filter(!node_is_isolated())
在两个子图中都进行了调用,但多面图仍会绘制所有分离株。facet_edges
当我避免指定选项时,不会发生这种情况。
任何帮助将不胜感激。