Установите положение меток внутри круговой диаграммы - PullRequest
0 голосов
/ 01 февраля 2019

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

enter image description here

df <- data.frame(Gruppierung = c("Very long label", "Very very long label", "Long label", "Short label", "Long label / long label"), 
                     freq = c(3.1, 6.2, 8.7, 20, 21))

library(plotly)                                                                                                                                                                       
plot_ly(df, labels=~Gruppierung,values=~freq, marker = list(line = list(color = '#FFFFFF', width = 1)), type="pie",
        textposition = 'auto',textinfo = 'text',
        hoverinfo = 'text',source = "subset",
        text=~paste(sub(" ","<br>",Gruppierung),":","<br>",paste0(freq,"%") ),
        insidetextfont = list(color = '#FFFFFF')) %>%
  layout(showlegend = FALSE,separators = ',.') %>% config(displayModeBar = F)

Моя проблема (чего я хотел бы достичь):

Если метка не может совпадать по горизонтали с пространством, в котором она находится, она должна располагаться вне круговой диаграммы

Спасибо за помощь!

[!!] Подход, предложенный @Saurabh Chauhan, очень хорош, НО, к сожалению, он не будет соответствовать каждый раз, вот скриншот ниже, который может показать проблему, когда даже с высокой частотой некоторые метки не горизонтальны:

enter image description here

1 Ответ

0 голосов
/ 01 февраля 2019

Самый простой способ - проверить freq.Если freq меньше некоторого значения, например less than 5%, то метка должна располагаться снаружи следующим образом:

plot_ly(df, labels=~Gruppierung,values=~freq, marker = list(line = list(color = '#FFFFFF', width = 1)), type="pie",
    textposition = ifelse(df$freq<5,"outside","inside"),textinfo = 'text',
    hoverinfo = 'text',source = "subset",
    text=~paste(sub(" ","<br>",Gruppierung),":","<br>",paste0(freq,"%") ),
    insidetextfont = list(color = '#FFFFFF')) %>%
    layout(showlegend = FALSE,separators = ',.') %>% config(displayModeBar = F)

Снимок экрана из рабочей демонстрации:

enter image description here

Обновлено

Еще один результат с (когда freq<10): enter image description here

...