R语言绘制足球传球场图报错object 'x' not found
报错根因
运行抛出object 'x' not found错误由三处代码逻辑不规范导致:
geom_point参数传参不符合ggplot2语法:传入数据集时未显式声明data =形参,且aes()映射内部使用data_player$Resultado的外部取列写法,会破坏图层的映射继承关系。ggMarginal调用方式错误:该函数默认从传入的ggplot对象中自动提取x、y轴映射,不需要手动传入x、y参数。你手动传入的x = x1 - 258.015、y = y1在当前运行环境无对应变量定义,直接触发对象不存在的报错;且此处x轴偏移量与散点图层使用的x1 - 58.015不一致,即使不报错也会出现坐标错位问题。- ggplot初始化未绑定全局数据与映射:使用空
ggplot()初始化绘图对象,未全局声明数据集和基础x、y映射,会导致ggMarginal无法自动识别需要统计的字段。
修正后可运行代码
library(ggplot2) library(readr) library(gridExtra) library(ggforce) library(ggExtra) # 读取数据,替换为你本地的文件实际存储路径即可 full_data <- read_delim("full_data.txt", ";", locale = locale(decimal_mark = ","), trim_ws = TRUE) # 筛选目标球员、赛事的传球数据 jugador_elegido <- "Sergio Busquets" rival_elegido <- "Real Madrid" donde <- "2" evento_elegido <- "Pass All" data_player <- subset(full_data, nombre_jugador == jugador_elegido & Rival == rival_elegido & Local == donde & Sección == evento_elegido) # 绘制带足球场底图的传球散点图 player_scatter_plot <- ggplot(data = data_player, # 全局声明x、y映射,供ggMarginal自动识别 mapping = aes(x = x1 - 58.015, y = y1)) + geom_point(aes(fill = factor(Resultado)), shape = 21, size = 5) + guides(fill = guide_legend(title = NULL)) + # 绘制足球场边界、禁区、中圈等场地元素 geom_rect(mapping = aes(xmin = 0.0, xmax = 596.97, ymin = 50.5, ymax = 446.5), color = "#00529f", fill = NA, alpha = 0.1) + geom_rect(mapping = aes(xmin = 0.0, xmax = 91.935, ymin = 128.975, ymax = 368.025), color = "#00529f", fill = NA, alpha = 0.1) + geom_rect(mapping = aes(xmin = 505.035, xmax = 596.97, ymin = 128.975, ymax = 368.025), color ="#00529f", fill = NA, alpha = 0.1) + geom_rect(mapping = aes(xmin = 0.0, xmax = 29.858, ymin = 195, ymax = 302.0), color ="#00529f", fill = NA, alpha = 0.1) + geom_rect(mapping = aes(xmin = 567.112, xmax = 596.97, ymin = 195, ymax = 302.0), color ="#00529f", fill = NA, alpha = 0.1) + geom_linerange(aes(x = 298.485, ymin = 50.5, ymax = 446.5), color = "#00529f") + geom_point(mapping = aes(x = 66.33, y = 248.5), size = 1, color = "#00529f") + geom_point(mapping = aes(x = 530.64, y = 248.5), size = 1, color = "#00529f") + geom_circle(mapping = aes(x0 = 298.485, y0 = 248.5, r = 52), color = "#00529f") + coord_fixed() + theme_no_axes(base.theme = theme_bw()) + theme(legend.position = c(0.5, 0.04), legend.box = "horizontal", legend.direction = "horizontal", legend.box.background = element_rect(fill = "transparent", colour = "transparent"), legend.text = element_text(size = 14), panel.border = element_blank(), axis.title = element_blank(), axis.text = element_blank(), axis.ticks = element_blank()) + scale_x_continuous(limits = c(0,647.47), expand = c(0,0)) + scale_y_continuous(limits = c(0,497), expand = c(0,0)) # 生成带边缘分布直方图的最终场图,无需手动传入x、y参数 ggMarginal(player_scatter_plot, type = "histogram", xparams = list(breaks = seq(0,600,50), color = "#00529f"), yparams = list(breaks = seq(50,450,50), color = "#00529f") )
内容的提问来源于stack exchange,提问作者Eduardo Amorim
相关产品推荐
相关产品推荐

