Поверните циферблат графика графика с использованием R - PullRequest
0 голосов
/ 26 июня 2019

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

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

У меня естьпосмотрел на эти опубликованные вопросы:

Диаграмма положения шкалы циферблата R

Как повернуть циферблат в диаграмме шкалы?Использование python plotly

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

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

library(plotly)
library(Math)
current <- 2000
goal <- 10000

base_plot <- plot_ly(
  type = "pie",
  values = c(40, 10, 10, 10, 10, 10, 10),
  labels = c("-", "0", goal*.2, goal*.4, goal*.6, goal*.8, goal),
  rotation = 108,
  direction = "clockwise",
  hole = 0.4,
  textinfo = "label",
  textposition = "outside",
  hoverinfo = "none",
  domain = list(x = c(0, 0.48), y = c(0, 1)),
  marker = list(colors = c('rgb(255, 255, 255)', 'rgb(255, 255, 255)', 'rgb(255, 255, 255)', 'rgb(255, 255, 255)', 'rgb(255, 255, 255)', 'rgb(255, 255, 255)', 'rgb(255, 255, 255)')),
  showlegend = FALSE)

a <- list(showticklabels = FALSE, autotick = FALSE, showgrid = FALSE, zeroline = FALSE)
b <- list(xref = 'paper', yref = 'paper', x = 0.23, y = 0.45, showarrow = FALSE, text = current)
h <- .24
k <- .5
r <- .15
theta <- ((100 - current) * 180 / 100) * pi / 180
    I've also tried: 
    theta <- pi/180 * (goal - current) / goal
    theta <- (current * 180 / 300) * pi / 180
c <- h + r * cos(theta)
    I've also tried
    c <- h - r * cos(theta)
d <- k + r * sin(theta)

base_chart <- layout(base_plot,
  shapes = list(list(
      type = 'path',
      path = paste('M .235 .5 L',c,d,'L 0.245 0.5 Z'),
      xref = 'paper',
      yref = 'paper',
      fillcolor = 'rgba(44, 160, 101, 0.5)')),
  xaxis = a, yaxis = a, annotations = b)```
...