Предотвратить фоновое изображение от покрытия покрытия - PullRequest
0 голосов
/ 16 мая 2018

Я генерирую пузырьковые диаграммы из кластеров данных NBA.Окончательная форма данных:

data

Где Group.1 - это индекс кластера, ad.SHOT_MADE_FLAG - это процент цели поля для кластера ,ordins.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

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

plot

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

1 Ответ

0 голосов
/ 16 мая 2018

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
...