使用 ggraph 在二分网络中指定节点形状和标签
Specify node shape and label in a bipartite network with ggraph
我想用 ggraph 绘制相邻矩阵。
我的数据看起来像这样
set.seed(43);
check <- matrix(rnorm(10), nrow = 5,ncol = 4, dimnames = list(c("AL","CH","CZ","DN","SC"), c("GR","EN","GE","FR")))
GR EN GE FR
AL -0.03751376 -0.27743280 -0.03751376 -0.27743280
CH -1.57460441 0.38643441 -1.57460441 0.38643441
CZ -0.48596752 -0.06040412 -0.48596752 -0.06040412
DN 0.46518623 -0.68617976 0.46518623 -0.68617976
SC -0.90409807 -1.90613679 -0.90409807 -1.90613679
我想使用二分网络绘制交互图,但我发现很难在顶部和底部的 x 轴上指定标签。
我也想改变节点的形状。我想在顶部看到一个蓝色方块,在底部看到一个绿色圆圈。
ggraph(check, layout = "bipartite") +
geom_edge_link0(aes(edge_width = weight),edge_colour = "grey66") +
geom_node_point()
非常感谢任何帮助或评论。
如果在将邻接矩阵传递给绘图之前创建布局,则可以检查其中的变量。
library(ggraph)
#> Loading required package: ggplot2
set.seed(43);
check <- matrix(rnorm(10), nrow = 5,ncol = 4,
dimnames = list(c("AL","CH","CZ","DN","SC"),
c("GR","EN","GE","FR")))
(layout <- create_layout(check, "bipartite"))
#> x y type name .ggraph.orig_index circular .ggraph.index
#> 1 0.5 1 FALSE AL 1 FALSE 1
#> 2 1.5 1 FALSE CH 2 FALSE 2
#> 3 2.5 1 FALSE CZ 3 FALSE 3
#> 4 3.5 1 FALSE DN 4 FALSE 4
#> 5 4.5 1 FALSE SC 5 FALSE 5
#> 6 1.0 0 TRUE GR 6 FALSE 6
#> 7 2.0 0 TRUE EN 7 FALSE 7
#> 8 3.0 0 TRUE GE 8 FALSE 8
#> 9 4.0 0 TRUE FR 9 FALSE 9
我们可以在上面的布局中看到,type
变量似乎对二分图的哪一部分在顶部和底部进行了编码。因此,我们可以使用节点层中的映射让shape
和colour
依赖于type
变量。
g <- ggraph(layout) +
geom_edge_link0(aes(edge_width = weight),edge_colour = "grey66") +
geom_node_point(aes(shape = type, colour = type), size = 6) +
scale_colour_manual(values = c("blue", "green")) +
scale_shape_manual(values = c(15, 19))
g
在 x 轴上获取正确的标签可能有点复杂,但基本上您可以从布局中提取中断和标签信息。
g + scale_x_continuous(
breaks = layout$x[!layout$type],
labels = layout$name[!layout$type],
position = "top",
sec.axis = dup_axis(
breaks = layout$x[layout$type],
labels = layout$name[layout$type]
)
) +
theme(axis.text = element_text())
由 reprex package (v1.0.0)
于 2021-07-10 创建
请注意,这可能不适用于 任何 图,但由于二分图的属性特别有效。标记节点的更通用策略是使用 geom_node_text()
:
g + geom_node_text(aes(label = name,
y = y + ifelse(type, -0.05, 0.05)),
vjust = "outward")
我想用 ggraph 绘制相邻矩阵。 我的数据看起来像这样
set.seed(43);
check <- matrix(rnorm(10), nrow = 5,ncol = 4, dimnames = list(c("AL","CH","CZ","DN","SC"), c("GR","EN","GE","FR")))
GR EN GE FR
AL -0.03751376 -0.27743280 -0.03751376 -0.27743280
CH -1.57460441 0.38643441 -1.57460441 0.38643441
CZ -0.48596752 -0.06040412 -0.48596752 -0.06040412
DN 0.46518623 -0.68617976 0.46518623 -0.68617976
SC -0.90409807 -1.90613679 -0.90409807 -1.90613679
我想使用二分网络绘制交互图,但我发现很难在顶部和底部的 x 轴上指定标签。 我也想改变节点的形状。我想在顶部看到一个蓝色方块,在底部看到一个绿色圆圈。
ggraph(check, layout = "bipartite") +
geom_edge_link0(aes(edge_width = weight),edge_colour = "grey66") +
geom_node_point()
非常感谢任何帮助或评论。
如果在将邻接矩阵传递给绘图之前创建布局,则可以检查其中的变量。
library(ggraph)
#> Loading required package: ggplot2
set.seed(43);
check <- matrix(rnorm(10), nrow = 5,ncol = 4,
dimnames = list(c("AL","CH","CZ","DN","SC"),
c("GR","EN","GE","FR")))
(layout <- create_layout(check, "bipartite"))
#> x y type name .ggraph.orig_index circular .ggraph.index
#> 1 0.5 1 FALSE AL 1 FALSE 1
#> 2 1.5 1 FALSE CH 2 FALSE 2
#> 3 2.5 1 FALSE CZ 3 FALSE 3
#> 4 3.5 1 FALSE DN 4 FALSE 4
#> 5 4.5 1 FALSE SC 5 FALSE 5
#> 6 1.0 0 TRUE GR 6 FALSE 6
#> 7 2.0 0 TRUE EN 7 FALSE 7
#> 8 3.0 0 TRUE GE 8 FALSE 8
#> 9 4.0 0 TRUE FR 9 FALSE 9
我们可以在上面的布局中看到,type
变量似乎对二分图的哪一部分在顶部和底部进行了编码。因此,我们可以使用节点层中的映射让shape
和colour
依赖于type
变量。
g <- ggraph(layout) +
geom_edge_link0(aes(edge_width = weight),edge_colour = "grey66") +
geom_node_point(aes(shape = type, colour = type), size = 6) +
scale_colour_manual(values = c("blue", "green")) +
scale_shape_manual(values = c(15, 19))
g
在 x 轴上获取正确的标签可能有点复杂,但基本上您可以从布局中提取中断和标签信息。
g + scale_x_continuous(
breaks = layout$x[!layout$type],
labels = layout$name[!layout$type],
position = "top",
sec.axis = dup_axis(
breaks = layout$x[layout$type],
labels = layout$name[layout$type]
)
) +
theme(axis.text = element_text())
由 reprex package (v1.0.0)
于 2021-07-10 创建请注意,这可能不适用于 任何 图,但由于二分图的属性特别有效。标记节点的更通用策略是使用 geom_node_text()
:
g + geom_node_text(aes(label = name,
y = y + ifelse(type, -0.05, 0.05)),
vjust = "outward")