解决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
相关产品推荐
相关产品推荐

