Как построить круг с помощью функции geom_circle - PullRequest
0 голосов
/ 27 августа 2018

Моя цель - нарисовать размеры / линии баскетбольной площадки NBA, используя комбинацию пакетов ggplot2 и ggforce. Я использовал слой + geom_segment (), чтобы успешно нарисовать отрезки (боковые линии, линии штрафного броска и т. Д.), Но мне трудно использовать функции + geom_circle () и + geom_arc () для рисования кругов и дуги окружности (линия из трех точек, круг полукорта и т. д.)

Мой код выглядит следующим образом, где «образец» объекта - это просто кадр данных снимков с координатами x и y:

ggplot(sample, aes(shot_x, shot_y)) +
geom_point(color = "red", alpha = .2) +
geom_segment(aes(x = 0, xend = 94, y = 0, yend = 0)) +
geom_segment(aes(x = 0, xend = 94, y = 50, yend = 50)) +
geom_segment(aes(x = 0, xend = 0, y = 0, yend = 50)) +
geom_segment(aes(x = 94, xend = 94, y = 50, yend = 0)) +
geom_segment(aes(x = 0, xend = 14, y = 3, yend = 3)) +
geom_segment(aes(x = 80, xend = 94, y = 3, yend = 3)) +
geom_segment(aes(x = 0, xend = 14, y = 47, yend = 47)) +
geom_segment(aes(x = 80, xend = 94, y = 47, yend = 47)) +
geom_segment(aes(x = 47, xend = 47, y = 0, yend = 50)) +
geom_segment(aes(x = 0, xend = 19, y = 19, yend = 19)) +
geom_segment(aes(x = 0, xend = 19, y = 31, yend = 31)) +
geom_segment(aes(x = 75, xend = 94, y = 19, yend = 19)) +
geom_segment(aes(x = 75, xend = 94, y = 31, yend = 31)) +
geom_segment(aes(x = 19, xend = 19, y = 19, yend = 31)) +
geom_segment(aes(x = 75, xend = 75, y = 19, yend = 31)) +
geom_segment(aes(x = 4, xend = 4, y = 22, yend = 28)) +
geom_segment(aes(x = 90, xend = 90, y = 22, yend = 28)) +
coord_fixed(ratio = 1)

Когда я добавляю:

+ geom_circle(aes(x0 = 47, y0 = 25, r = 6))

(который должен рисовать кружок в половине корта), на визуализации не появляются кружки, и результат включает в себя исходный график (отрезок и точки для выстрелов), а также дубликат всех точек данных, но смещение вверх и вправо. Чтобы было ясно, ошибок не возникает, просто результат не тот, к которому я стремлюсь.

Кроме того, когда я полностью удаляю слой geom_point () и запускаю код вроде:

ggplot() +
geom_segment(...)

Тогда я могу успешно добавить слой geom_circle (). Однако мне нужно иметь возможность добавить кружок, а также включить точки данных.

Есть идеи, почему это происходит, или что я делаю не так? Спасибо!

1 Ответ

0 голосов
/ 27 августа 2018

Не знаю почему, но добавление inherit.aes = FALSE в вызове geom_circle исправляет это.

# generate sample data
sample = data.frame(shot_x = c(10, 20), shot_y = c(30, 40))
ggplot(sample, aes(shot_x, shot_y)) +
  # ... all your segment lines
  coord_fixed(ratio = 1) +
  geom_circle(aes(x0 = 47, y0 = 25, r = 6), inherit.aes = FALSE)

enter image description here

...