防止背景图像覆盖情节
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
我正在从 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