You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何正确从R库nflplotR获取并使用球队Logo数据?

解决nflplotR球队Logo在可视化图表中无法显示的问题

问题核心错误分析

  • 误用ggimage的geom_image,未使用nflplotR专为NFL球队设计的geom_nfl_logos,后者无需手动管理Logo资源
  • logo_placement_data中坐标列名为a和b,但代码中错误映射为x=x、y=y,导致坐标匹配失败
  • 多余的inner_join(logos)操作,nflplotR内置所有NFL球队的Logo与缩写映射,无需手动导入外部Logo数据集
  • 未定义的grey变量,直接使用字符串"grey"即可避免报错

修正后的完整代码

library(nflfastR)
library(nflplotR)
library(tidyverse)
library(gghighcontrast)
library(scales)
library(ggthemes)

plot_for_data <- 
  function(data,
           foreground_color,
           background_color) {
    single_game_id <- data[1, ]$game_id
    
    game_title_pieces <- strsplit(single_game_id, "_")[[1]]
    game_year <- game_title_pieces[1]
    game_week <- game_title_pieces[2]
    
    home_team_abbr <- data[1, ]$home_team
    away_team_abbr <- data[1, ]$away_team
    
    # 构建Logo位置数据,无需关联外部logos数据集
    logo_placement_data <- data.frame(
      x = c(3600, 3600),
      y = c(0.875, 0.125),
      team_abbr = c(home_team_abbr, away_team_abbr),
      stringsAsFactors = FALSE
    )
    
    plot <- ggplot(data,
                   aes(x = game_seconds_remaining, y = home_wp_custom)) +
      # 50%参考线
      geom_hline(yintercept = 0.5,
                 color = "grey",
                 size = 1) +
      
      # 各节参考线
      geom_vline(xintercept = 15 * 60, color = "grey") +
      geom_vline(xintercept = 30 * 60, color = "grey") +
      geom_vline(xintercept = 45 * 60, color = "grey") +
      
      # 节次标注
      annotate(
        "text",
        x = 58 * 60,
        y = 0.95,
        label = "Q1",
        family = "InputMono",
        color = "grey",
        size = 2
      ) +
      annotate(
        "text",
        x = 43 * 60,
        y = 0.95,
        label = "Q2",
        family = "InputMono",
        color = "grey",
        size = 2
      ) +
      annotate(
        "text",
        x = 28 * 60,
        y = 0.95,
        label = "Q3",
        family = "InputMono",
        color = "grey",
        size = 2
      ) +
      annotate(
        "text",
        x = 13 * 60,
        y = 0.95,
        label = "Q4",
        family = "InputMono",
        color = "grey",
        size = 2
      ) +
      
      # 获胜概率曲线
      geom_line(aes(y = home_wp_post), color = "grey") +
      geom_line(size = 0.8) +
      
      # 得分事件标记
      geom_rug(
        data = filter(data, away_scoring_play == 1),
        color = foreground_color,
        sides = "b",
        size = 1.5
      ) +
      geom_rug(
        data = filter(data, home_scoring_play == 1),
        color = foreground_color,
        sides = "t",
        size = 1.5
      ) +
      
      # 使用nflplotR专属函数绘制球队Logo
      geom_nfl_logos(data = logo_placement_data,
                     aes(x = x, y = y, team_abbr = team_abbr),
                     width = 0.08) +
      
      # 图表格式设置
      scale_x_reverse() +
      scale_y_continuous(labels = percent, limits = c(0, 1)) +
      theme_high_contrast(
        base_family = "InputMono",
        background_color = background_color,
        foreground_color = foreground_color
      ) +
      theme(axis.text.x = element_blank(),
            axis.ticks.x = element_blank()) +
      labs(
        title = str_interp(
          "${game_year} Week ${game_week}: ${away_team_abbr} at ${home_team_abbr}"
        ),
        subtitle = "Custom win probability model compared to nflfastR WP (grey)",
        caption = "Data from nflfastR",
        x = "Quarters",
        y = "Home Win Probability"
      )
  }

for (single_game_id in game_ids) {
  plot <- 
    plot_for_data(
      filter(pbp_data, game_id == single_game_id),
      foreground_color,
      background_color
    )
  
  ggsave(
    str_interp("wp-${single_game_id}.png"),
    plot = plot,
    width = 6,
    height = 4
  )
}

关键修改说明

  1. 移除冗余参数:删除函数的logos参数,无需手动传入Logo数据集
  2. 替换Logo绘制函数:用geom_nfl_logos替代geom_image,直接通过球队缩写team_abbr自动匹配对应Logo
  3. 修正坐标映射:将logo_placement_data中的坐标列直接命名为x和y,避免映射错误
  4. 删除无效操作:去掉多余的inner_join(logos),nflplotR会自动处理Logo资源
  5. 修复颜色变量:将未定义的grey改为字符串"grey",避免变量未找到错误

内容的提问来源于stack exchange,提问作者J. Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:51:18