【发布时间】:2017-10-19 04:44:39
【问题描述】:
我很可能遇到了一个简单解决方案的问题。我有两个数据框。第一个是一个简单的边列表,其权重如下所示:
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) 使用 @987654328 中的权重列对边缘进行加权@。
感谢您的帮助!
【问题讨论】:
-
TEM 和 AAC 是一个会议的一部分?数据框缺少标题
-
如果您提供complete minimal reproducible example 来回答您的问题,我们更有可能为您提供帮助。我们可以从中工作并用来向您展示如何回答您的问题。
-
对不起@HardikGupta。我已经解决了桌子问题。它现在有标题。 @EricFail,当我尝试运行绘图时收到此输出:
Error: Aesthetics must be either length 1 or the same as the data (832): colour, from_id, to_id.感谢您的帮助。 -
@EricFail 我很抱歉。这是我第一次在这里发帖,我不明白什么是完整的最小可重现示例,您清楚地将其链接起来。上面的代码已经更新。我非常感谢您的帮助和耐心。
-
一切都好。我很感激你投入其中的工作!但是,minimal 示例确实很有帮助。您的完整的可重现示例有 600 行代码。您是否有机会在 the `geomnet' package examples page 找到您正在寻找的示例并将其重新加工成一个完整的最小可重复示例?