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

如何在R语言中基于分区百分比向量制作自定义棒球落点分布图

基于区域百分比的R语言自定义棒球落点分布图函数

以下是一个无需(x,y)坐标、仅使用区域百分比数据生成棒球落点分布图的R函数。函数会将你的百分比数据映射到预定义的棒球场地区域,并根据数值大小填充对应颜色:<5%为白色,5%-19%为浅绿色,≥20%为深绿色。

create_spray_chart <- function(percentages) {
  # 检查并加载ggplot2包
  if (!requireNamespace("ggplot2", quietly = TRUE)) {
    stop("需要安装ggplot2包,请运行 install.packages('ggplot2')")
  }
  library(ggplot2)
  
  # 定义棒球场地各区域的多边形坐标(可根据需求调整坐标优化布局)
  field_regions <- data.frame(
    region = rep(c("P", "C", "3B", "SS", "2B", "1B", "LF", "LFTCENTER", "CF", "UPTHEMIDDLE", "RGHTCENTER", "RF"), each = 4),
    x = c(
      -1, -1, 1, 1,          # 投手区(P)
      -2, -2, 2, 2,          # 捕手区(C)
      -10, -5, -3, -8,       # 三垒区(3B)
      -5, -1, 1, -3,         # 游击区(SS)
      1, 5, 8, 3,            # 二垒区(2B)
      5, 10, 8, 3,           # 一垒区(1B)
      -20, -12, -7, -15,     # 左外野(LF)
      -12, -7, 0, -5,        # 左中外野(LFTCENTER)
      -7, 0, 7, -5,          # 中外野(CF)
      0, 7, 7, 0,            # 中野中路(UPTHEMIDDLE)
      7, 12, 15, 7,          # 右中外野(RGHTCENTER)
      12, 20, 15, 7          # 右外野(RF)
    ),
    y = c(
      9, 11, 11, 9,          # 投手区(P)
      -1, 1, 1, -1,          # 捕手区(C)
      4, 7, 5, 2,            # 三垒区(3B)
      7, 9, 7, 5,            # 游击区(SS)
      9, 7, 5, 7,            # 二垒区(2B)
      7, 4, 2, 5,            # 一垒区(1B)
      10, 15, 20, 15,        # 左外野(LF)
      15, 20, 15, 10,        # 左中外野(LFTCENTER)
      20, 25, 20, 15,        # 中外野(CF)
      20, 15, 10, 15,        # 中野中路(UPTHEMIDDLE)
      15, 10, 15, 20,        # 右中外野(RGHTCENTER)
      10, 10, 15, 15         # 右外野(RF)
    )
  )
  
  # 将输入的百分比向量转换为数据框
  data_df <- data.frame(
    region = names(percentages),
    percentage = as.numeric(percentages)
  )
  
  # 合并区域坐标与百分比数据
  plot_data <- merge(field_regions, data_df, by = "region")
  
  # 计算每个区域的中心点坐标(用于显示百分比标签)
  centroids <- plot_data %>%
    group_by(region) %>%
    summarize(
      centroid_x = mean(x),
      centroid_y = mean(y),
      percentage = first(percentage)
    )
  
  # 生成可视化图表
  p <- ggplot(plot_data, aes(x = x, y = y, group = region)) +
    geom_polygon(aes(fill = percentage), color = "black", linewidth = 0.5) +
    scale_fill_gradient2(
      low = "white",
      mid = "lightgreen",
      high = "darkgreen",
      midpoint = 10,
      limits = c(0, 20),
      breaks = c(0, 5, 10, 15, 20),
      labels = c("0%", "5%", "10%", "15%", "20%"),
      guide = guide_colorbar(title = "百分比")
    ) +
    geom_text(data = centroids, aes(x = centroid_x, y = centroid_y, label = paste0(percentage, "%")), 
              size = 4, fontface = "bold") +
    coord_equal() +
    theme_void() +
    labs(title = "棒球落点分布图:各区域击球百分比")
  
  return(p)
}

使用示例

将你的示例数据传入函数即可生成图表:

# 示例百分比数据
example_data <- c(
  RF = 9, CF = 6, LF =9, 3B=9, SS=6, 2B=19, 1B=3, C=3, P=9, LFTCENTER=9, UPTHEMIDDLE=3, RGHTCENTER=12
)

# 生成并显示图表
spray_chart <- create_spray_chart(example_data)
print(spray_chart)

自定义说明

  • 调整场地布局:可以修改field_regions中的x和y坐标,让各区域的形状和位置更符合你需要的样式。
  • 修改颜色规则:调整scale_fill_gradient2中的low、mid、high参数,或改用scale_fill_steps实现离散颜色分档(比如严格按<5%、5%-10%、≥10%划分)。
  • 调整标签样式:修改geom_text中的size、fontface等参数,优化百分比标签的显示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:05:32