DiagrammeR在R中创建“错误”图表

时间:2017-02-06 18:15:45

标签: r

我的代码用R中的图表库生成图表。对于数据源,我使用xlsx文件,您可以在此link下载

library("xlsx")
df <-xlsx::read.xlsx("animals.xlsx", sheetIndex = 1, header = TRUE, encoding = "UTF-8")

使用第一行我将文件导入R.然后使用col1col2创建图表

uniquenodes <- unique(c(df$col1, df$col2))

library(DiagrammeR)

nodes <- create_nodes(nodes=seq(uniquenodes), type="number", label=uniquenodes)
edges <- create_edges(from=match(df$col1, uniquenodes), to=match(df$col2, uniquenodes), rel="related")
g <- create_graph(nodes_df=nodes, edges_df=edges)
render_graph(g)

使用代码后,我得到了这张照片:

enter image description here

什么时候看起来像这样:

enter image description here

1 个答案:

答案 0 :(得分:1)

简答

将您的数据导入代码更改为:

df <-xlsx::read.xlsx("animals.xlsx", 
                     sheetIndex = 1, 
                     header = TRUE, 
                     encoding = "UTF-8",
                     stringsAsFactors = FALSE)

长解释

您的列似乎实际上是因素,而不是字符。我将在这里重新创建您的数据框(我没有使用xlsx包,因为我太懒了,无法进行系统更改以安装它)

df <- data.frame(col1 = c("Cat", "Dog", "Bird"),
                 col2 = c("Feline", "Canis", "Avis"))
uniquenodes <- unique(c(df$col1, df$col2))

uniquenodes
[1] 2 3 1

当列是因子时使用您的代码会得到您获得的数字。如果列是字符串,则代码将按预期工作。请注意这里的区别:

df <- data.frame(col1 = c("Cat", "Dog", "Bird"),
                 col2 = c("Feline", "Canis", "Avis"),
                 stringsAsFactors = FALSE)
uniquenodes <- unique(c(df$col1, df$col2))

uniquenodes

library(DiagrammeR)


nodes <- create_nodes(nodes=seq(uniquenodes), type="number", label=uniquenodes)
edges <- create_edges(from=match(df$col1, uniquenodes), to=match(df$col2, uniquenodes), rel="related")
g <- create_graph(nodes_df=nodes, edges_df=edges)
render_graph(g)