2017-10-18 32 views
2

我使用简单的解决方案很可能遇到问题。我有两个数据帧。首先是一个简单的边列表与权重,看起来像这样:使用ggplot使用来自一个文件的数据和使用另一个文件的颜色编码绘制网络

head(merge_allwinsloss_df) 

winner loser weight 
1 CAL HAW  20 
2 TENN APP  7 
3 LOU CHAR  56 
4 CMU PRE  46 
5 WAKE TULN  4 
6 CIN UTM  21 

,第二个是,它提供的分组(在大学橄榄球会议的形式),看起来像这样的文件:

short conference 
1 TEM  AAC 
2 USF  AAC 
3 UCF  AAC 
4 CIN  AAC 
5 ECU  AAC 
6 CONN  AAC 

我想要做的是创建一个使用有向图(从赢家到失败者)的图(最好使用ggplot),在同一个会议中加权边缘(通过权重)并对这些边进行颜色处理,并使用颜色代码节点通过会议。下面的代码是一个“开始”,但我并没有真正得到任何地方。

ggplot(data = merge_allwinsloss_df, aes(from_id = winner, to_id = loser)) + 
    geom_net(aes(color = all_teams_by_conference_df), layout.alg = "fruchtermanreingold", 
      size = 2, labelon = TRUE, vjust = -0.6, ecolour = "grey80", 
      directed = TRUE, fontsize = 3, ealpha = 0.5) + 
    scale_color_brewer("Conference", 
        palette = "Paired") + 
    xlim(c(-0.05, 1.05)) + 
    theme_net() + 
    theme(legend.position = "bottom") 

我融化了数据但也引起了不少的大多是要么失去映射或我无法弄清楚如何通过会议正确标记的团队merge_allwinsloss_df相关的其他问题。如果这不是明显的话,我很抱歉。我一直在寻找帮助,把我的大脑折腾了好几天,所以任何帮助都会得到很大的赞赏。提前致谢。

更新:这是一个最小的例子。

#Create a list of CFB winners and losers with weight given by point differential 
merge_allwinsloss_ALT_df <- data.frame(matrix(c("CAL","HAW", 12, "TENN", "APP", 7, "LOU", "CHAR", 56, 
            "CMU", "HAW", 0, "WVU", "APP", 20 , "ARK", "TENN", 6, "CMU", "WVU", 7, 
            "WVU", "JMU", 15, "IND", "MIN", 3, "IND", "HAW", 14, "FSU", "TCU", 2, 
            "TCU", "ARK", 14), 
      nrow=12,ncol=3,byrow=TRUE)) 
colnames(merge_allwinsloss_ALT_df) <- c("winner", "loser", "weight") 
merge_allwinsloss_ALT_df 

#Create a list of CFB teams with conference associations 
all_teams_by_conference_ALT_df<- data.frame(matrix(c("CAL","PAC", "HAW", "MAC", "TENN", "SEC", 
                "APP", "SUN BELT", "LOU", "ACC", "CHAR", "FCS", 
               "CMU", "MAC", "WVU", "BIG 12", "ARK", "SEC", "JMU", "FCS", 
               "IND", "BIG 10", "MIN", "BIG 10", "FSU", "ACC", "TCU", 
               "BIG 12"), 
               nrow=14,ncol=2,byrow=TRUE)) 
colnames(all_teams_by_conference_ALT_df) <- c("team", "conference") 
all_teams_by_conference_ALT_df 

# (attempt to) Plot the two data files using the first as the nodes and the # second as a reference file for coloring by conference. 

ggplot(data = merge_allwinsloss_ALT_df, aes(from_id = winner, to_id = loser)) + 
    geom_net(aes(color = all_teams_by_conference_ALT_df), layout.alg = "fruchtermanreingold", 
      size = 2, labelon = TRUE, vjust = -0.6, ecolour = "grey80", 
      directed = TRUE, fontsize = 3, ealpha = 0.5) + 
    scale_color_brewer("Conference", 
        palette = "Paired") + 
    xlim(c(-0.05, 1.05)) + 
    theme_net() + 
    theme(legend.position = "bottom") 

我意识到有些东西是在这里,但我无法弄清楚。此外,我想设置它,以便(a)在同一个会议中所有参加过比赛的球队的边缘都有共同的颜色,并且(b)使用merge_allwinsloss_df_ALT中的权重列来加权边缘。

谢谢你的帮助!

+1

TEM和AAC是一次会议的一部分?数据框缺少标题 –

+1

如果您提供[完整的最小可重现示例](http://stackoverflow.com/help/mcve)以解决您的问题,那么我们很可能可以为您提供帮助。我们可以从中学习并使用它来向您展示如何回答您的问题。 –

+0

对不起@HardikGupta。我已经解决了表问题。它现在有标题。 @EricFail,当我尝试运行图时,我收到了这个输出: '错误:美学必须是长度1或与数据(832)相同:color,from_id,to_id.'感谢您的帮助。 –

回答

1

您需要将两个表连接在一起,以便它们都在一个数据框中。

要添加的赢家会议,你会如下做到这一点:

df1 <- merge(merge_allwinsloss_ALT_df,all_teams_by_conference_ALT_df, 
    by.x="winner",by.y="team",all.x=T) 

同时捕获的胜与败队的会议,那么我会重新命名df1$conference为‘conference_winner’,并然后再次执行相同的合并,这次使用df1by.x="loser"

此外,我会建议尝试使用较短的名称为您的数据帧。一遍又一遍地输入merge_allwinsloss_ALT_df没有任何意义。另外merge是一个函数,因此当您在名称中使用它时会造成混淆,从而使问题复杂化(请参阅上面的代码,因为您的命名约定,我的代码是merge(merge...))。

之后,您可以将color和/或fill映射到conference_winnerconference_loser

+0

我想我可能一直没有好好沟通。我实际上想绘制带有定向边的顶点('团队')(使用从“胜利者”到“失败者”)并通过会议对它们进行颜色编码。此外,在相同的会议中相互竞争并且在同一会议中的团队共享具有相同颜色的边缘。 –

+0

我做了类似于您在发布原始问题之前所陈述的内容,但无法达到期望的结果。在保持“赢家”和“失败者”(和“重量”)的同时,熔化数据会使我的行数增加一倍,原因很明显。所以我不知道该怎么做。再次感谢! –

相关问题