R geom_area и координировать_полярное преобразование в график - PullRequest
1 голос
/ 26 апреля 2019

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

df <- data.frame(angle = rep(seq(0, 360, 45), 4), frequency = rep(1:9, 4), z = as.character(c(rep(1, 9), rep(2, 9))))
df <- aggregate(frequency ~ angle + z, data = df, sum)

pl <- ggplot(df,aes(x=angle,y=frequency,fill=z)) + geom_area() + coord_polar() + scale_x_continuous(breaks=angle, labels=c("N", "NE", "E", "SE", "S", "SO", "O", "NO", "N"))
pl

ggplot one

p <- plot_ly(type = 'scatterpolar', mode = "scatter")
for (g in 1:2){
  p <- p %>%
    add_trace(data = df[df$z == g,],
              theta = ~df$angle, r = ~df$frequency,
              opacity = 1, fill = "tozeroy")
}
p <- p %>% layout(
  polar = list(radialaxis = list(angle = 90),
               angularaxis = list(
                 rotation = 90,
                 direction = 'clockwise',
                 ticktext =  c("N", "NE", "E", "SE", "S", "SO", "O", "NO", "N"),
                 tickvals = seq(0, 360, 45)
               )
  )
)
p

plotly one

Спасибо за любую подсказку о том, как это сделать.

1 Ответ

2 голосов
/ 26 апреля 2019

Вот отправная точка для решения вашей проблемы:

k <- 100
df <- data.frame(angle = rep(seq(0, 360, length.out=k), 4), 
                 frequency = rep(1:k, 4), 
                 z = as.character(c(rep(1, k), rep(2, k))))
df <- aggregate(frequency ~ angle + z, data = df, sum)   
df$frequency[df$z==2] <- df$frequency[df$z==2]/2

p <- plot_ly(data=df, type = 'scatterpolar', mode = "lines") %>%
     add_trace(theta=~angle,r=~frequency,fill="toself", color=~z)
p <- p %>% layout(
  polar = list(radialaxis = list(angle = 90),
               angularaxis = list(
                 rotation = 90,
                 direction = 'clockwise',
                 ticktext =  c("N", "NE", "E", "SE", "S", "SO", "O", "NO", "N"),
                 tickvals = seq(0, 360, 45)
               )
  )
)
p

enter image description here

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