Розовая диаграмма для данных миграции

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

Вот набор тестовых данных среднего угла и смещения на группу.

testsum<-data.frame(Group=c(1,2,3),
                angle=c(0.78,1.04,2.094),
                displacement=c(1.5,2,1))

Когда я пытаюсь построить это круговым методом, моя диаграмма выглядит очень неправильно.

p1<-ggplot(testsum, aes(x=angle,y=displacement))+
  coord_polar(theta="x",start=0)+
  geom_bar(stat="identity",aes(color=Group,fill=Group),width=.01)+    
  scale_x_continuous(breaks=seq(0,360,60))

Это дает мне этот график для вывода.

Когда это основано на том, что говорят данные, оно должно выглядеть примерно так (рисунок предполагаемого результата).

Вроде неправильно расставляет углы? Есть идеи, что я делаю не так?

3 ответа

Решение

Может быть, вы можете попробовать это:

testsum$angle_b=180*testsum$angle/pi
#
ggplot(testsum, aes(x=angle_b,y=displacement))+
    geom_bar(stat="identity",aes(color=Group,fill=Group),width=1) +    
    scale_x_continuous(breaks=seq(0,360,10), limits=c(0,360)) + coord_polar(direction=1)

Хотя MLavoie "избил меня" на 20 минут, я думаю, что некоторую читабельность можно добавить с помощью NISTunits пакет:

library(ggplot2)
library(NISTunits)

testsum <- data.frame(
  Group = c(1, 2, 3),
  angle = c(0.78, 1.04, 2.094),
  displacement = c(1.5, 2, 1)
)

testsum$angle = NISTradianTOdeg(testsum$angle)

ggplot(testsum, aes(x = angle, y = displacement)) +
  coord_polar(theta = "x", start = NISTdegTOradian(-90), direction = 1) +
  geom_bar(stat = "identity",
           aes(color = Group, fill = Group),
           width = 1) +
  scale_x_continuous(breaks = seq(0, 360, 10), limits = c(0, 360))

Результат:

введите описание изображения здесь

Чтобы обрезать нижнюю половину, проверьте этот ответ.

Может быть, вы можете использовать функцию windRose из пакета на открытом воздухе

library(openair)
    testsum<-data.frame(Group=c(1,2,3),angle=c(0.78,1.04,2.094),displacement=c(1.5,2,1))
    testsum$angle=180*testsum$angle/pi
windRose(testsum,ws="displacement",wd="angle",breaks=c(0.5,1,1.5,2),paddle=F,key.header = "My Rose",angle=10, 
     statistic="prop.mean",key.footer = "Displacement")

введите описание изображения здесь

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