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

解决NBA投篮气泡图背景图覆盖数据及Y轴范围限制问题

解决你的NBA投篮气泡图问题

嘿,我来帮你搞定这两个头疼的问题,咱们逐个拆解:

1. 背景图覆盖数据的问题

你猜得完全没错,annotation_custom()的图层顺序就是问题根源!ggplot是按代码书写顺序绘制图层的——先写的图层在底层,后写的在顶层。你原来的代码里先画了数据点,再添加背景图,结果背景图直接盖在了数据点上面。

解决方法超简单:把annotation_custom()移到geom_point()前面,让背景图先画(待在底层),数据点后画(浮在顶层)。

2. 限制Y轴显示到418以下(隐藏后场投篮)

要精准控制Y轴范围,直接在coord_fixed()里设置ylim参数就好,这样既能保持NBA球场的比例,又能只显示你需要的前场区域。

另外给你提个小优化:ggplot的aes()里不用写final$xxx,直接用列名就行,代码会更简洁规范。

修改后的完整代码

courtImg.URL <- "https://thedatagame.files.wordpress.com/2016/03/nba_court.jpg" 
court <- rasterGrob(readJPEG(getURLContent(courtImg.URL)), width=unit(1,"npc"), height=unit(1,"npc")) 

p6 <- ggplot(final, aes(x = coords.x1, y = coords.x2, size = x, fill = ad.SHOT_MADE_FLAG)) +
  # 先绘制背景图,确保在底层
  annotation_custom(court, -250, 250, -52, 418) +
  geom_point(shape = 21) +
  scale_x_continuous() +
  # 设置Y轴显示范围,隐藏后场区域
  coord_fixed(ylim = c(-52, 418)) +
  scale_fill_gradientn(colours = c("Blue","Red")) +
  theme(
    line = element_blank(), 
    axis.title.x = element_blank(), 
    axis.title.y = element_blank(), 
    legend.title = element_blank(), 
    plot.title = element_text(size = 17, lineheight = 1.2, face = "bold")
  ) +
  ggtitle("Stephen Curry Shot Chart")

p6

这样修改后,背景图会乖乖待在数据点下方,而且Y轴只会显示你需要的前场区域,后场投篮会被自动隐藏啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:05:38