使用ggplot2可视化igraph度分布

时间:2013-09-26 04:13:31

标签: r ggplot2 igraph

我希望使用 ggplot2 可视化 igraph 对象的度数分布。因为 ggplot2 不接受degree()生成的简单数字向量,所以我将其转换为频率表。然后我把它传递给ggplot()。我仍然得到:geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?我无法将表格列degree设置为因子,因为我还需要在对数刻度上绘制它。

library(igraph)
library(ggplot2)

g <- ba.game(20) 

degree <- degree(g, V(g), mode="in")
degree
# [1] 6 2 7 1 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0

degree <- data.frame(table(degree))
degree
#   degree Freq
# 1      0   13
# 2      1    4
# 3      2    1
# 4      6    1
# 5      7    1

ggplot(degree, aes(x=degree, y=Freq)) +
  geom_line()
# geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic?

1 个答案:

答案 0 :(得分:2)

问题在于您已使用degree$degreetable转换为因子。有两件事要解决这个问题:

  • 使其成为所有可能值(最大程度)的因素,以便您不会错过零。
  • 在绘图之前将标签转换回数字

实施这些(我使用degree.df而不是覆盖degree来保持不同的步骤不同):

degree.df <- data.frame(table(degree=factor(degree, levels=seq_len(max(degree)))))
degree.df$degree <- as.numeric(as.character(degree.df$degree))

然后绘图代码就是你所拥有的:

ggplot(degree.df, aes(x=degree, y=Freq)) +
  geom_line()

enter image description here