2

我正在尝试绘制二元组的共现(来自Text Mining with R),如下所示: 在此处输入图像描述

或者像这样: 在此处输入图像描述

但是按照书中给出的完全相同的代码,我的情节缺少很多线条和颜色。不知道是因为我错过了一些重要步骤还是我错过了某些包裹。

下面是一个更简单的版本来说明:

library(dplyr)
library(ggplot2)
library(igraph)
library(ggraph)

terms <- sample(letters[1:10],50,replace=T)
count <- sample(1:50,25,replace=T)

bigrams <- data_frame(term1=terms[1:25],term2=terms[26:50],occur=count) %>%
  arrange(desc(occur)) %>%
  graph_from_data_frame()

a <- grid::arrow(type = "closed", length = unit(.15, "inches"))

而且我得到的情节不正确(甚至图例也没有正确显示):

ggraph(bigrams, layout = "fr") +
  geom_edge_link(aes(edge_alpha = occur), show.legend = FALSE,  
                 arrow = a, end_cap = circle(.07, 'inches')) +
  geom_node_point(color = "lightblue", size = 5) +
  geom_node_text(aes(label = name), vjust = 1, hjust = 1) +
  theme_void()

在此处输入图像描述

ggraph(bigrams, layout = "fr") +
  geom_edge_link(aes(edge_alpha = occur, edge_width = occur), edge_colour = "cyan4") +
  geom_node_point(size = 5) +
  geom_node_text(aes(label = name), repel = TRUE, 
                 point.padding = unit(0.2, "lines")) +
  theme_void()

在此处输入图像描述

好的,这很有趣,但删除theme_void()所有解决方案。我想当这本书被写出来时,它会做一些不同的事情。但是第二张图中的图例仍然没有显示,所以仍然有问题:

在此处输入图像描述 在此处输入图像描述

4

1 回答 1

3

我发现 ggraph 包很好,但有一些问题。对我来说,如果您放大 RStudio 中的绘图,您的代码就可以工作。
但是,我建议您使用一些小型模组,无需缩放即可制作情节:

ggraph(bigrams, layout = "fr") +
  geom_edge_link(aes(width = occur),          # seems the alpha creates problem with legend
                 colour = "cyan4") +
  geom_node_point(size = 5) +
  scale_edge_width(range = c(0.2, 2)) +       # rescale the edges
  geom_node_text(aes(label = name), repel = TRUE, point.padding = unit(0.2, "lines"))+
 theme_graph()                                # made for graph

在此处输入图像描述

如果你想要 alpha,你可以试试这个,但我注意到你看到的图例只在 RStudio 中放大:

在此处输入图像描述


数据与您的相同,但带有set.seed(1).

于 2018-10-02T08:36:59.427 回答