R сюжетная полярная диаграмма простой настройки - PullRequest
1 голос
/ 12 апреля 2019

Привет R и сюжетные эксперты,

В последнее время я пробую свои силы на plotly.

Вот мой простой минимальный код дизайна :

library(plotly)

df <- data.frame(
  r = c(0,1,2,2,1.5,3, 1, 2, 3, 4, 5, 6),
  theta = c(0,45,90,315, 180, 270, 10, 40, 70, 100, 130, 160),
  group = c('R', 'B', 'G', 'R', 'G', 'B', 'R', 'B', 'G', 'R', 'G', 'B'),
  size = c(1, 2, 3, 10, 20, 9, 2, 4, 6, 8, 10, 12)
)

colors_map <- c("blue", "green", "red") 

p <- plot_ly(
  df,
  type = 'scatterpolar',
  r = ~r,
  theta = ~theta,
  color = ~group, 
  colors = colors_map, #Provide a color mapped vector
  size = ~size, 
  sizes = c(100,200), #Provide a range of size.
  text = ~paste('<b>DETAILS </b><br>---------------<br>Radius:', r, '<br>Theta:', theta, '<br>Group:', group, '<br>Size:', size), 
  mode = 'markers',
  hoverinfo="text",
  marker = list(symbol = 'circle', line = list(width = 2, color = 'lightgrey'))
)%>%
  layout(title = 'SAMPLE TITLE',
         showlegend = TRUE,
    polar = list(
      #hole = 0.5,
      radialaxis = list(
        tickfont = list(
          size = 20,
          color = "blue"
        ),
        visible = TRUE,
        tickcolor = toRGB("red"),
        ticks = "outside",
        #ticklen = 15,
        #tickwidth = 20,

        range = c(0, max(df$r)),
        rangemode = "tozero",
        angle = 90,
        tickangle = 90,
        #gridcolor = '#FFF', #color of grid lines
        categoryorder = "array",
        categoryarray = c("GroupA", "GroupB", "GroupC", "GroupD") #Not working
      ),
      angularaxis = list(
        tickfont = list(
          size = 12
        ),
        rotation = 90,
        direction = 'clockwise' ,
        categoryarray = c("A", "B", "C", "D") #Not working
      )
    )
  )
ggplotly(p)

Диаграмма построена так:

enter image description here

Я пробовал что-то на основе документации, но не смог достичь. Вот элементы, которые мне не удалось отобразить [Немногие из них решены и отправлены в ответ]:

  1. [решено] Показывает цвет точек в зависимости от того, к какой группе принадлежит . Если он принадлежит к группе R, то цвет должен быть красным, если B, то синим, а если G, то зеленым.

  2. [решено] Размер точек , показанный на полярной диаграмме, довольно мал, есть ли способ увеличить его или дать диапазон размеров?

  3. [решено] В середине каждой точки я хочу показать текст / число , скажем, я хочу показать size значение на центр каждой точки . Как я могу это сделать?

  4. удалить метки угловых осей на основе угла и хочу поставить мою пользовательскую метку как A, B, C, D при 45 градусов , 135 градусов, 225 градусов и 315 градусов соответственно.

  5. [решено] показывает метку радиальной оси на вертикальной линии вне полярной диаграммы вместо того, как она присутствует внутри диаграммы. Он должен быть вне графика в форме вертикального правила, с моими пользовательскими метками, скажем, GroupA, GroupB, GroupC, GroupD.

  6. [решено] Сделать подсказку при наведении курсора для увеличения и показать в ней больше информации. Например, прямо сейчас, информация group отображается вне всплывающей подсказки, она должна находиться внутри строки. Удаление theta из всплывающей подсказки.

  7. Как заполнить концентрический круг серым цветом и написать на нем текст.? С ggplot я реализовал это, используя geom_rect внизу графика, а затем coord_polar, но этот подход не будет работать в polar chart с plotly. Любой другой подход?

Я понимаю, что это может быть основным для plotly экспертов, но я борюсь и усложняю вещи из-за последних 4 часов.

Я хочу что-то похожее, как показано ниже : enter image description here Я уверен, что этот вопрос будет иметь большое значение для помощи новичкам в настройке графически визуальных диаграмм полярной диаграммы, поскольку онлайн-справка недоступна и ТАК вопрос к ней. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 12 апреля 2019

Пока что я могу решать решено помеченных предметов.

R, сюжетный код:

library(plotly)

df <- data.frame(
  r = c(0,1,2,2,1.5,3, 1, 2, 3, 4, 5, 6),
  theta = c(0,45,90,315, 180, 270, 10, 40, 70, 100, 130, 160),
  group = c('R', 'B', 'G', 'R', 'G', 'B', 'R', 'B', 'G', 'R', 'G', 'B'),
  size = c(1, 2, 3, 10, 20, 9, 2, 4, 6, 8, 10, 12)
)

colors_map <- c("blue", "green", "red") 

p <- plot_ly(
  df,
  type = 'scatterpolar',
  r = ~r,
  theta = ~theta,
  color = ~group, 
  colors = colors_map, #Provide a color mapped vector
  size = ~size, 
  sizes = c(100,200), #Provide a range of size.
  text = ~paste('<b>DETAILS </b><br>---------------<br>Radius:', r, '<br>Theta:', theta, '<br>Group:', group, '<br>Size:', size), 
  mode = 'markers',
  hoverinfo="text",
  marker = list(symbol = 'circle', line = list(width = 2, color = 'lightgrey'))
)%>%
  layout(title = 'SAMPLE TITLE',
         showlegend = TRUE,
         polar = list(
           #hole = 0.5,
           radialaxis = list(
             tickfont = list(
               size = 20,
               color = "blue"
             ),
             visible = TRUE,
             tickcolor = toRGB("red"),
             ticks = "outside",
             #ticklen = 15,
             #tickwidth = 20,

             range = c(0, max(df$r)),
             rangemode = "tozero",
             angle = 90,
             tickangle = 90,
             tickmode="array",
             tickvals = c(0, 1, 2, 3, 4, 5, 6, 7),
             ticktext = c('', "One", "Two", "Three", "Four", "Five", "Six", "Seven")
             #gridcolor = '#FFF', #color of grid lines
             #categoryorder = "array",
             #categoryarray = c("GroupA", "GroupB", "GroupC", "GroupD") #Not working
           ),
           angularaxis = list(
             tickfont = list(
               size = 12
             ),
             rotation = 90,
             direction = 'clockwise' ,
             categoryarray = c("A", "B", "C", "D") #Not working
           )
         )
  )%>%
  add_trace(
    r = ~r,
    theta = ~theta,
    mode = "text",
    text = ~size,
    textfont = list(color = '#000000', size = 12)
  )  %>%
  add_trace(
    r = ~r, 
    theta = ~theta,
    mode = "marker",
    opacity = 0.5,
    text = ~paste('<b>DETAILS </b><br>---------------<br>Radius:', r, '<br>Theta:', theta, '<br>Group:', group, '<br>Size:', size), 
    hoverinfo = "text"

  ) 

ggplotly(p)

Диаграмма: enter image description here

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