Создайте график набора в R, используя plotly или ggplot2 - PullRequest
1 голос
/ 28 апреля 2020

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

enter image description here

Две половины - это зеркальные изображения с точки зрения положения и цвета циферблата, но текст в центре и метки отличаются. Я видел несколько примеров, но они не полностью покрывают то, что мне нужно:

  1. ggplot Кольцевая диаграмма
  2. Диаграмма шкалы положения набора номера Plotly R ,
  3. https://www.r-graph-gallery.com/doughnut-plot.html
  4. Скрыть метки на графике кольцевого графика r

пример кода

Попытка первой верхней части графика сначала с использованием plotly:

plot_func <- function(current_value){
  fig <- plot_ly(
    domain = list(x = c(0, 1), y = c(0, 1)),
    value = current_value,
    title = list(text = "Rating"),
    type = "indicator",
    mode = "number+gauge",
    gauge = list(
      axis =list(range = list(100, 85)),
      bar = list(
        # color = 'white', 
        # line = list(width = 1), 
        thickness = 0
      ),
      steps = list(
        list(range = c(85,90), color = "#b20000", name = 'E'),
        list(range = c(90,92.5), color = "#e09999", name = 'D'),
        list(range = c(92.5, 95), color = "#ffffb2", name = 'C'),
        list(range = c(95, 97.5), color = '#7fbf7f', name = 'B'),
        list(range = c(97.5,100), color = "#008000", name = 'A')),
      threshold = list(
        line = list(color = "red", width = 4),
        thickness = 0.75,
        value = current_value)))

  return(fig)
}

myplot <- plot_func(current_value = 99.8)

Это дает вывод: enter image description here

Я не могу найти способ:

  1. Имею непрерывный цветовой диапазон, а не пошаговое изменение, которое я имею сейчас
  2. изменить красную полосу для current_value вместо стрелки

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 апреля 2020

Ваша первая проблема с созданием градиента может быть решена с помощью scale_*_gradient, который "создает двухцветный градиент (низкий-высокий), scale_*_gradient2 создает расходящийся градиент цвета (низкий-средний-высокий), scale_*_gradientn создает градиент n-цвета. " Источник

В следующем примере

scale_colour_gradient(
  ...,
  low = "#132B43",
  high = "#56B1F7",
  space = "Lab",
  na.value = "grey50",
  guide = "colourbar",
  aesthetics = "colour"
)

Что касается стрелки, то для этого есть геом!

geom_line(arrow = arrow(length=unit(0.30,"cm"), ends="first", type = "closed"))

Проблема в том, что более подробно рассматривается в этот соответствующий вопрос.

...