防止背景图像覆盖情节

Prevent Background Image from Covering Plot

我正在从 NBA 投篮数据集群生成气泡图。数据的最终形式为:

其中 Group.1 是集群的索引,ad.SHOT_MADE_FLAG 是集群的投篮命中率,coords.x1 和 x2 是该集群中点的平均 x 和 y 坐标,并且x 是该簇中的镜头数(x 和 y 点)。

我正在用以下内容绘制数据:

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 = final$coords.x1, y = final$coords.x2, size = 
  final$x,fill=final$ad.SHOT_MADE_FLAG)) +
  geom_point(shape = 21) +
  annotation_custom(court, -250, 250, -52, 418) + 
  scale_x_continuous() +
  coord_fixed() + 
  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 轴上 418 点以下的图。我不想展示后场的投篮,因为它们不那么相关。仅供参考,当我删除 annotation_custom() 行时,它显示以下图:

所以 annotation_custom 行的执行似乎是问题的一部分。任何帮助将不胜感激。谢谢!

ggplot2 按照您指定的顺序绘制图层。要将球场的图像移动到分数下方,请将其放在绘制顺序的第一位。另一个可能使您的绘图更漂亮的修复方法是使面板背景透明,以便您可以看到图像顶部的点,我认为这就是您想要的。

您可以使用 scale_y_continuous() 中的 limits 参数设置绘图的末端。

更新绘图代码:

p6 <- ggplot(final, aes(x = final$coords.x1, y = final$coords.x2, size = 
  final$x,fill=final$ad.SHOT_MADE_FLAG)) +
  annotation_custom(court, -250, 250, -52, 418) + 
  geom_point(shape = 21) +
  scale_x_continuous() +
  scale_y_continuous(limits=c(-52,418)) +
  coord_fixed() + 
  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(),
    panel.background = element_rect(fill="transparent"),
    plot.title = element_text(size = 17, lineheight = 1.2, face = "bold")) +
  ggtitle("Stephen Curry Shot Chart")

p6