问题标签 [ggraph]
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 - 在 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()
graph - 在不使用 GGRAPH 的 SPSS 散点图中反转轴
我想在 SPSS 中创建一个带有反向 y 轴的分组散点图,但我不知道如何。y 轴从 1 到 12 向上,但我想反转它,所以它从 1 到 12 向下。
使用命令GRAPH
和子命令 /SCATTERPLOT
无法手动反转 y 轴。
使用使用命令的图表生成器,GGRAPH
我可以反转 y 轴(使用SCALE: cat(dim(2), reverse())
),但它会使用奇怪的数字(例如 24、31、37、43 而不是 20、30)弄乱我在 x 轴上的比例, 40) 我无法改变。
您有什么想法如何制作带有倒置 y 轴的分组散点图或如何重新调整 x 轴的比例GGRAPH
?我是 SPSS 的初学者,所以一些代码会很有帮助。谢谢您的帮助。
使用命令GRAPH
- 在这里我无法反转 y-axis。
使用带有命令GGRAPH
的图表构建器 - 这里图表构建器对 x 轴使用了一个我无法更改的奇怪比例。.
r - 由 tidygraph 计算的无向网络图显示的度中心性超出了应有的范围
我有一个包含 26 个节点的清理数据集。我使用 tidygraph 将这 26 个节点放置在一个无向网络图中,我使用该centrality_degree()
函数来计算中心度。但是,当我绘制结果网络时,我可能的最高中心度为 40,这应该是不可能的。当我将图表更改为有向图时,这已得到纠正。
我有点困惑,作为我过去使用的其他方法,我手动计算中心度,我从未遇到过这个问题。
这是常规行为,还是我做错了什么?
可重现的例子:
r - ggraph 节点标签被截断
我使用 ggraph 生成了一个非常简单的带有圆形布局的网络图。节点标签的角度沿圆的边缘发生变化,以便于阅读。但是,标签被截断,调整边距似乎没有任何区别。我玩了ggsave,egg,并没有太多的快乐。
这是我的可重现代码。也许有人可以帮助我。提前致谢:
r - 如何根据节点社区对边缘进行着色?
如何将颜色信息添加到 tbl_graph 的边缘?我想根据“to”和“from”节点的颜色为边缘着色:如果两个节点具有相同的颜色,那么它们之间的边缘应该具有相同的颜色。
r - R ggraph 在指定 facet_edges 时删除隔离
我正在用这个tidygraph
包做一些探索性的网络分析。我正在尝试使用ggraph
包生成带有我的数据的多面图。我创建了 2 个不同的tbl_graph
对象,我使用该bind_graphs
函数将它们绑定在一起。
我正在使用的代码是:
尽管有大量警告,但我仍然获得了多面图。但是,尽管filter(!node_is_isolated())
在两个子图中都进行了调用,但多面图仍会绘制所有分离株。facet_edges
当我避免指定选项时,不会发生这种情况。
任何帮助将不胜感激。
r - ggraph:根据属性的顶点位置
假设我有一个igraph
如下图:
出于目前的目的,该图将始终是一棵树或一个 DAG,我想用ggraph
树状布局来绘制该图。我的问题是:如何使用time
y 值的 vertex 属性绘制此图?
我可以设置正确定位节点aes(y = time)
,geom_node_point
但边缘不跟随:
由reprex 包(v0.3.0)于 2019 年 11 月 17 日创建
将y
oryend
美学设置为time
ingeom_edge_link
会引发错误。
我是新手ggraph
,所以我被困在如何解决这个问题上。