【问题标题】:Visualize igraph degree distribution with ggplot2用 ggplot2 可视化 igraph 度分布
【发布时间】:2013-09-26 04:13:31
【问题描述】:

我想用 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?

【问题讨论】:

    标签: r ggplot2 igraph


    【解决方案1】:

    问题是您使用tabledegree$degree 变成了一个因子。解决这个问题的两件事:

    • 将它作为一个包含所有可能值的因子(直到最大程度),这样您就不会错过零。
    • 在绘图前将标签转换回数字

    实现这些(我使用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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2019-10-27
      • 1970-01-01
      • 2018-07-22
      • 2018-12-08
      • 2016-05-02
      • 2013-07-28
      相关资源
      最近更新 更多