防止背景图像覆盖图

时间:2018-05-16 17:32:08

标签: r ggplot2 bubble-chart hclust

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

data

其中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

这将输出以下图表

plot

我想解决两个问题。首先,背景图像覆盖了大部分数据。其次,我想仅显示y轴上418点下方的图。我不想显示后场投篮,因为他们并不相关。仅供参考,当我删除annotation_custom()行时,它显示以下图:

plot

因此,annotation_custom行的实现似乎是问题的一部分。任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

ggplot2按照您指定的顺序绘制绘图图层。要将法院的图像移动到点下方,请将其放在绘图顺序中的第一位。另一个可能使你的情节变得更好的修复方法是让面板背景透明,这样你就可以看到图像顶部的点,我认为这是你想要的。

您可以使用limits中的scale_y_continuous()参数设置图表的结尾。

更新了绘图代码:

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