круговая диаграмма, показывающая подшипники и расстояние - PullRequest
0 голосов
/ 10 января 2019

Я пытаюсь показать ориентиры, которые люди проезжали за пределами площадки, и расстояние, пройденное в течение 1 дня, а также количество людей, путешествующих на разных подшипниках.

В настоящее время я могу сделать эти основные графики в ggplot2:

# distance & bearing
ggplot(data=df,
       aes(bear, dist)) +
  geom_point() +
  scale_y_log10()

# no. individuals & bearing
ggplot(data=df.postDepDT,
       aes(bear)) +
  geom_histogram(bins = 36)

#my data looks like the following
bear <- c(-172, -175, -160, -155, -150, -10, 23, 87, 122, 179)
dist <- c(5, 101, 326, 47, 23, 55, 6, 7, 44, 162)
df <- data.frame(bear, dist)

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

На этих рисунках 0o (или север) будет наверху, -180o / 180o (юг) будет внизу, а -90o и 90o (запад и восток) слева и справа соответственно.

ОБНОВЛЕНИЕ:

Добавлениеordin_polar () к фигурам помогает сделать круглую фигуру, однако я все еще не могу получить значение 0o (для севера) в верхней части фигуры (start = 0 помещает значение 0o внизу) , Кроме того, я все еще ищу решение для соединения точек на первом графике с центральной точкой.

1 Ответ

0 голосов
/ 11 января 2019

Вы ищете что-то подобное?

illustration

ggplot(data=df,
       aes(bear, dist)) +
  geom_segment(aes(xend = bear, yend = 0.1)) +
  geom_point() +
  scale_x_continuous(limits = c(-180, 180),
                     breaks =  seq(-180, 180, 90)) +
  # scale_y_log10() +
  coord_polar(start = pi) +
  theme_bw()

Пояснения

  1. geom_segment() ожидает эстетику для x, y, xend, & yend. Версия круговой диаграммы «pre- coord_polar» с линиями, исходящими из центра, была бы диаграммой в декартовых координатах с линиями, которые падают вертикально вниз, чтобы пересечь ось x, поэтому мы бы хотели, чтобы каждое значение xend быть равным значению x, а каждое значение yend должно быть наименьшим из возможных (которое будет равно 0 для расстояния, но, поскольку вас интересует масштаб журнала для оси y, я добавил небольшое положительное значение):

cartesian form

ggplot(data=df,
       aes(bear, dist)) +
  geom_segment(aes(xend = bear, yend = 0.1)) +
  geom_point() +
  scale_x_continuous(limits = c(-180, 180),
                     breaks =  seq(-180, 180, 90)) +
  # scale_y_log10() +
  # coord_polar(start = pi) +
  theme_bw()
  1. coord_polar() ожидает следующее для аргумента start (выделение добавлено):

смещение начальной точки от 12 часов в радианах

Поскольку фактические значения вашего подшипника находятся в диапазоне c(-175, 179), я ожидаю, что ваша шкала будет c(-180, 180). Таким образом, значение по умолчанию start = 0 поместит -180/180 в положение 12 часов. Чтобы поместить 0 в положение 12 часов, установите start = pi, что составляет 180 градусов в радианах.

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

illustrations with different yend values

p <- ggplot(data=df,
       aes(bear, dist)) +
  geom_point() +
  scale_x_continuous(limits = c(-180, 180),
                     breaks =  seq(-180, 180, 90)) +
  scale_y_log10() +
  coord_polar(start = pi) +
  theme_bw()

gridExtra::grid.arrange(
  p + geom_segment(aes(xend = bear, yend = 1)) + ggtitle("yend = 1"),
  p + geom_segment(aes(xend = bear, yend = 0.1)) + ggtitle("yend = 0.1"),
  p + geom_segment(aes(xend = bear, yend = 0.01)) + ggtitle("yend = 0.01"),
  p + geom_segment(aes(xend = bear, yend = 0.001)) + ggtitle("yend = 0.001"),
  nrow = 2
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...