Диаграмма розы в R

Я хочу нарисовать розовую диаграмму некоторых круговых данных. Я использовал circular пакет и в этом пакете позволяет нарисовать простую диаграмму роз с помощью функции: rose.diag, Несмотря на то, что это рисует диаграмму, я хочу иметь возможность улучшать графики, но я не могу найти, чтобы добавить к графику или немного изменить его. Я смотрел на рисование в ggplot2 но это не кажется мне понятным, и я изо всех сил пытаюсь найти другой пакет в R, который рисует диаграммы роз, подобные этой. Если кто-то может помочь с этим, я был бы рад услышать ваши ответы.

Я публикую ниже образец данных и мой текущий код вместе с моими запросами:

Angle
0.65454759
0.01355458
0.5052027
0.2264302
-0.350552
-0.428481
0.1231778
0.258787
0.06723504
0.06906181
2.54608572
-1.6591672
3.00437314
-0.0503291
-0.828578
-1.9616418
-0.6468774
0.01438686
0.1162713
0.9938797
0.1861583
0.1547071
0.2577813
0.5110576
0.08714113

Эти данные представляют собой радиальные углы поворота. С использованием circular Пакет Я делаю эти данные вектор класса circular:

x <- circular(Angle)

Затем нарисуйте диаграмму розы, используя следующий код, где она изображает диаграмму в градусах, а не в радианах:

rose.diag(x, pch = 16, cex = 1, axes = TRUE, shrink = 1, col=3, prop = 2, 
    bins=36, upper=TRUE, ticks=TRUE, units="degrees")

Есть 3 вещи, которые я хотел бы добавить к этому сюжету:

  1. Измените ориентацию графика так, чтобы 0 было сверху, а не справа.
  2. Добавьте концентрические круги на график, чтобы помочь с визуальной интерпретацией размера и веса каждой из "корзин".
  3. Добавьте строку, чтобы определить средний угол (если возможно, с ошибками sd)

1 ответ

Решение

Есть несколько способов сделать это. Существует "нулевой" аргумент для rose.diag в этом пакете.

y <- scan() # paste in the values from the question and hit return twice
y <- circlar(y) # not necessary but prevents a warning
rose.diag(y, units = 'degrees', zero = pi/2) # units doesn't change the underlying units

В качестве альтернативы вы могли бы установить свойства circular объект, который вы создали.

y <- circlar(y, zero = pi/2)
rose.diag(y, units = 'degrees') # note, no 0 call here

Итак, теперь сюжет вращается... как добавить вещи...

> par('usr')
[1] -1.376553  1.376553 -1.123200  1.123200

Это дает мне пользовательские координаты и подсказывает размеры графика в пользовательском пространстве. Теперь я могу делать такие вещи, как добавить круг.

symbols(0, 0, circle = 0.2, inches = FALSE, add = TRUE, fg = 'red')

E сть lines.circular функция, но для меня не было очевидно, как ее использовать. Я также мог бы построить линию, используя segments или же arrows Команды и рисовать прямо на сюжете с ними. Для преобразования угла и длины линии в точки требуется немного евклидовой геометрии. Это все должно начать вас.

m <- mean.circle(y)
segments(0, 0, cos(m+pi/2), sin(m+pi/2), col = 'red') # note I need to add the new 0 position... there is a lines.circular function but it wasn't obvious to me how to use it.

(совет... обрамляющий круг в rose.diag находится в радиусе 1, так что это дает circle аргумент в symbols нарисую именно в этот момент)

Другие вопросы по тегам