Диаграмма розы в 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 вещи, которые я хотел бы добавить к этому сюжету:
- Измените ориентацию графика так, чтобы 0 было сверху, а не справа.
- Добавьте концентрические круги на график, чтобы помочь с визуальной интерпретацией размера и веса каждой из "корзин".
- Добавьте строку, чтобы определить средний угол (если возможно, с ошибками 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
нарисую именно в этот момент)