Для обычного полярного графика я привык к центру с нулевым радиусом, но в вашем случае центр графика имеет -3 в качестве радиуса.Поэтому вы не получите ожидаемого результата при использовании plot_lt ().Возможно, plot_lt () позволит вам изменить это в конфигурации, но я не смог его найти.
Возможное решение - сместить ангелов и радиус так, чтобы радиус всегда был больше нуля.Это делается в функции «shift_center_zero» ниже.Для каждого отрицательного радиуса умножьте на -1, чтобы получить положительный результат, и для этих строк сделайте сдвиг угла таким образом, чтобы радиус находился на другой стороне от центра.Сдвиг угла выполняется путем добавления половины раунда (180 градусов) и определения модуля полного раунда (360 градусов), чтобы ограничить угол таким образом, чтобы он находился в пределах одного раунда.
shift_center_zero <- function(m){
m_negative <- m[,2]<0 # get negative rows
m[m_negative,1] <- (m[m_negative,1]+180)%%360 # angle shift
m[m_negative,2] <- -1*m[m_negative,2] # radius shift
return(m)
}
Остальныеваш код почти такой же, с nrow = 360 вместо 361 для удаления NA и использованием новой функции shift_center_zero.
library(plotly)
f <- function(){
output <- matrix(ncol=2, nrow = 360)
for (i in 0:360){
output[i,1] <- i
output[i,2] <- 3 * cos(2 * (i * pi/180))
}
return(output)
}
mf <- f()
# make the shift
mf<-shift_center_zero(mf)
df <- data.frame("theta" = mf[,1], "r"=mf[,2])
p <- plot_ly(
df,
type = 'scatterpolar',
mode = 'lines'
) %>%
add_trace(
r = ~r,
theta = ~theta,
name = 'Function',
line = list(
color = 'red'
)
) %>%
layout(
title = 'Polar Graph',
font = list(
family = 'Arial',
size = 12,
color = '#000'
),
showlegend = F
)
p