我有来自英雄联盟的数据,我试图绘制两个变量--KDA(杀/死/助攻 - 连续,和分类变量,“角色”。我不会详细说明从来没有玩过这个游戏的人,但它是一个普通的PVP 5v5(五个玩家对五个玩家)MOBA游戏,因此每个团队有5个角色。我想按团队(盟军和敌人)分割角色来比较每个角色的KDA角色和团队。
我的数据框有三列 - TEAM(敌人/盟友),KDA(连续)和LANE(分类),每一行是一个游戏中的一个玩家。
> head(games,5)
KDA LANE TEAM
1 4.33 JGL E
2 7.50 MID E
3 1.43 ADC E
4 1.80 TOP E
5 5.00 SUPP E
我的代码可以正常运行并绘制出我希望它绘制的内容,但我的问题是 - 是不是有更简单的方法来绘制这个?我必须按团队计算每个角色的中位数(我创建一个函数),创建一个新的数据帧,然后绘制新的数据框。计算和绘制工具/中位数是一件非常有用的事情,通常也是我将要做的事情的一部分。这是我的第一个“项目”,我想在未来保持高效 - 我认为应该有一种方法来绘制平均值/中位数/平均值而无需创建函数和数据帧。代码:
#DATA IMPORT
games <- loldata
View(loldata)
#PACKAGES
library(tidyverse)
#MEDIAN CALCULATION
med_role <- function(role = "ADC", team = "E") { # ROLES: ADC/SUPP/TOP/JGL/MID # TEAM: E/A
role_kda <- games$KDA[games$LANE == role & games$TEAM == team]
medr <- median(role_kda)
medr
}
#DATAFRAME CREATION
medians <- data.frame(KDA = c(med_role(role="ADC", team="E"),
med_role(role="SUPP", team="E"),
med_role(role="MID", team="E"),
med_role(role="JGL", team="E"),
med_role(role="TOP", team="E"),
med_role(role="ADC", team="A"),
med_role(role="SUPP", team="A"),
med_role(role="MID", team="A"),
med_role(role="JGL", team="A"),
med_role(role="TOP", team="A")), role = c("AD
Carry","Jungle","Middle","Support","Toplane"),
team = c(rep("Enemy team",5), rep("Allied team",5)))
#PLOTTING
ggplot(data = medians) +
geom_bar(mapping = aes(x = role, y = KDA, fill = team), alpha = 0.750, stat
= "identity", position = "dodge") +
labs(x = "Role", y = "Median KDA", subtitle = "Average KDA by role in
soloq") +
theme(aspect.ratio = 1) +
theme(legend.title=element_blank()) +
scale_fill_manual(values=c("lightblue", "darkred")) +
theme_light()