Highcharts / HighcharteR — нарисуйте многоугольник со скругленными углами

#highcharts #polygon #r-highcharter

#highcharts #многоугольник #r-highcharter

Вопрос:

 library(highcharter)
highchart() %>% 
  hc_add_series(name='Polygon',type='polygon',data=list(c(1,4),c(2,4), c(3,3), c(2,3)), 
                borderRadius = 10, lineColor = "red", lineWidth = 3)][1]][1]
  

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

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

У кого-нибудь есть идея, как архивировать закругленный вид моего многоугольника? Документация в этом случае не помогла :-(. Это сделано в пакете R Highcharter, но я также был бы полностью согласен с примером в собственной библиотеке JS. Спасибо!

Комментарии:

1. Привет. К сожалению, в Highcharts такой опции нет. Вы могли бы добавить много поддельных точек возле углов, чтобы вручную «закруглить» углы, но это никогда не будет идеальным округлением. Я не вижу другого пути

2. Жаль, но я наткнулся на решение.

Ответ №1:

Это работает несколько:

 spline.poly <- function(xy, vertices, k=3, ...) {
  # Assert: xy is an n by 2 matrix with n >= k.
  
  # Wrap k vertices around each end.
  n <- dim(xy)[1]
  if (k >= 1) {
    data <- rbind(xy[(n-k 1):n,], xy, xy[1:k, ])
  } else {
    data <- xy
  }
  
  # Spline the x and y coordinates.
  data.spline <- spline(1:(n 2*k), data[,1], n=vertices, ...)
  x <- data.spline$x
  x1 <- data.spline$y
  x2 <- spline(1:(n 2*k), data[,2], n=vertices, ...)$y
  
  # Retain only the middle part.
  cbind(x1, x2)[k < x amp; x <= n k, ]
}


  X <- matrix(c(resultdf$yAxis, resultdf$xAxis), ncol=2)
  hpts <- chull(X) # Creates indices of a convex hull from a matrix
  hpts <- c(hpts, hpts[1]) # connect last and first dot
  hpts <- data.frame(X[hpts, ])
  hpts <- data.frame(spline.poly(as.matrix(data.frame(hpts$X1, hpts$X2)),  500)) %>%
    setNames(c("yAxis", "xAxis"))
  

spline.poly функция создает множество новых точек, которые соединяются с более округлой формой 🙂