DiagrammeR:根据数据框设计图表
DiagrammeR: Devise a graph from a dataframe
Objective(在R环境下):提取节点和边 从数据框中使用它们来建模图表!!
我正在尝试学习如何使用 DiagrammeR 或任何其他图形建模库以获得如下图所示的图形(您可以按照 link [The GRAPH1]) 来自数据框:
数据框:
a b c classes
1 2 0 a
0 0 2 b
0 1 0 c
我已经使用 DiagrammeR library
并通过这些命令 手动 定义了节点和边:
library(DiagrammeR)
egrViz("
digraph boxes_and_circles{
#add the node statement
node[shape=box]
a; b; c;
#add the nodge statement
a->a [label=1]; a-> b[label=2]; b->c[label=2]; c->b[label=1]
graph [nodesep=0.1]
}
")
你能帮我理解如何自动获取节点和边吗?提前谢谢你。
您可以使用 igraph
包执行此操作。您的数据框是一个邻接矩阵, igraph 包含一个将其制作成图形的函数。我下面的代码添加了一个布局,用于将顶点定位在您在示例图中指定的位置。
## Your data
df = read.table(text="a b c classes
1 2 0 a
0 0 2 b
0 1 0 c",
header=TRUE)
library(igraph)
g = graph_from_adjacency_matrix(as.matrix(df[,1:3]), weighted=TRUE)
LO = matrix(c(0,0,0,3,2,1), ncol=2)
plot(g, layout=LO, edge.label=E(g)$weight, vertex.shape="rectangle",
vertex.color="white", edge.curved=c(0,0,0.15,0.15))
Objective(在R环境下):提取节点和边 从数据框中使用它们来建模图表!!
我正在尝试学习如何使用 DiagrammeR 或任何其他图形建模库以获得如下图所示的图形(您可以按照 link [The GRAPH1]) 来自数据框:
数据框:
a b c classes
1 2 0 a
0 0 2 b
0 1 0 c
我已经使用 DiagrammeR library
并通过这些命令 手动 定义了节点和边:
library(DiagrammeR)
egrViz("
digraph boxes_and_circles{
#add the node statement
node[shape=box]
a; b; c;
#add the nodge statement
a->a [label=1]; a-> b[label=2]; b->c[label=2]; c->b[label=1]
graph [nodesep=0.1]
}
")
你能帮我理解如何自动获取节点和边吗?提前谢谢你。
您可以使用 igraph
包执行此操作。您的数据框是一个邻接矩阵, igraph 包含一个将其制作成图形的函数。我下面的代码添加了一个布局,用于将顶点定位在您在示例图中指定的位置。
## Your data
df = read.table(text="a b c classes
1 2 0 a
0 0 2 b
0 1 0 c",
header=TRUE)
library(igraph)
g = graph_from_adjacency_matrix(as.matrix(df[,1:3]), weighted=TRUE)
LO = matrix(c(0,0,0,3,2,1), ncol=2)
plot(g, layout=LO, edge.label=E(g)$weight, vertex.shape="rectangle",
vertex.color="white", edge.curved=c(0,0,0.15,0.15))