Запретить фоновому изображению закрывать сюжет

Я создаю пузырьковые диаграммы из кластеров данных 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

Это выводит следующую диаграмму

сюжет

Я хочу решить две проблемы с этим. Во-первых, фоновое изображение закрывает большую часть данных. Во-вторых, я хочу показать график только ниже точки 418 по оси Y. Я не хочу показывать удары из тыловой зоны, поскольку они не так важны. Просто для справки: когда я удаляю строку annotation_custom(), она показывает следующий график:

сюжет

Таким образом, реализация строки annotation_custom кажется частью проблемы. Любая помощь будет принята с благодарностью. Спасибо!


person Daniel    schedule 16.05.2018    source источник


Ответы (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
person phalteman    schedule 16.05.2018