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

如何用ggplot2绘制西甲赛事对阵结果表格并实现自定义样式?

实现西甲球队交锋结果对阵表(奇偶行着色+Tile内嵌球队名)

看起来你已经有了基础的geom_tile代码,那我们来一步步调整到你想要的效果——奇偶行区分颜色,同时把球队名嵌入Tile内,最终做出类似对阵表的可视化。

首先,我会用模拟数据来演示,你可以直接替换成自己的西甲赛事DataFrame:

1. 准备模拟数据(替换成你的真实数据)

假设你的数据包含home_team(主队)、away_team(客队)和result(比赛结果,比如"2-1"):

library(tidyverse)

# 模拟西甲球队和比赛数据
set.seed(123)
teams <- c("Barcelona", "Real Madrid", "Atletico Madrid", "Valencia", "Sevilla", "Real Sociedad")
matches <- expand.grid(home_team = teams, away_team = teams) %>%
  filter(home_team != away_team) %>% # 排除同队对阵
  mutate(result = paste(sample(0:3, nrow(.), replace = TRUE), 
                        sample(0:3, nrow(.), replace = TRUE), 
                        sep = "-"))

2. 标记奇偶行并设置颜色

我们先给每支球队的行分配行号,然后根据奇偶性设置填充色(奇数行白色,偶数行浅蓝色):

# 给球队排序并添加行号与颜色标记
team_metadata <- tibble(team = teams, row_num = 1:length(teams)) %>%
  mutate(tile_color = ifelse(row_num %% 2 == 1, "white", "#a6c9ff"))

3. 构建包含球队标题的完整数据集

为了把球队名嵌入Tile内,我们需要额外添加行标题(每行第一个Tile显示主队名称)和列标题(每列第一个Tile显示客队名称):

# 行标题数据:每行第一个Tile显示主队名
row_headers <- team_metadata %>%
  mutate(home_team = team, away_team = "Team", result = team)

# 列标题数据:每列第一个Tile显示客队名
col_headers <- team_metadata %>%
  mutate(home_team = "Team", away_team = team, result = team, row_num = 0, tile_color = "white")

# 合并比赛数据与标题数据
full_data <- matches %>%
  left_join(team_metadata, by = c("home_team" = "team")) %>%
  bind_rows(row_headers, col_headers) %>%
  arrange(row_num, home_team) # 按行号排序,确保标题行在最上方

4. 绘制最终可视化

现在用ggplot2绘制,重点是用tile_color控制填充,同时把结果/球队名嵌入Tile:

ggplot(full_data, aes(x = away_team, y = fct_inorder(home_team))) +
  # 绘制Tile,用奇偶行颜色填充
  geom_tile(aes(fill = tile_color), color = "black", size = 0.5) +
  # 直接使用我们定义的颜色,不做自动映射
  scale_fill_identity() +
  # 添加Tile内的文本(球队名或比赛结果)
  geom_text(aes(label = result), size = 4, color = "#333333") +
  # 隐藏默认轴标签、刻度,让可视化更像表格
  theme(
    axis.text = element_blank(),
    axis.title = element_blank(),
    axis.ticks = element_blank(),
    panel.background = element_blank(),
    plot.margin = margin(10, 10, 10, 10)
  )

关键细节说明

  • fct_inorder(home_team)确保球队行的顺序和我们定义的team_metadata一致,保证奇偶行颜色正确。
  • 如果你的真实数据里,每对球队有主客场两场比赛,可以先聚合结果(比如用paste合并两次结果),再进行可视化。
  • 你可以调整tile_color的蓝色值(比如#a6c9ff)来匹配你想要的深浅。

这样就能得到奇偶行颜色区分、Tile内嵌球队名和比赛结果的对阵表啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:10:45