Метки круговой диаграммы, выделенные жирным шрифтом (R)

#r #label #r-plotly

#r #метка #r-plotly

Вопрос:

Я изо всех сил пытаюсь найти метод, который выделит жирным шрифтом метки круговой диаграммы в plotly. Кто-нибудь знает, как выделить жирным шрифтом метки круговой диаграммы с выделением? Вот мой код:

 t <- list(
family = "Ariel",
size = 15,
color = 'black')

fig <-plot_ly()
#####Fall/Winter Concentration
fig <-fig%>% add_pie(concWDper, 
                 labels = concWDper$Compounds, 
                 values = concWDper$Concentration, 
                 type = 'pie',
                 sort = FALSE,
                 textinfo = '', 
                 textfont = list(color = '#000000'),
                 marker = list(colors = c("#9E0142", "#D53E4F", 
                "#F46D43","#FDAE61", "#FEE08B", "#FFFFBF", "#E6F598", 
                "#ABDDA4", "#66C2A5", "#3288BD", "#5E4FA2")),
                 domain = list(x = c(0, 0.5), y = c(0.75, 1)))
#####Spring/Summer Concentration
fig <-fig%>% add_pie(concSPDper, labels = concSPDper$Compounds, 
                 values = concSPDper$Concentration, type = 'pie',sort = FALSE,
                 textinfo = '', textfont = list(color = '#000000'),
                 marker = list(colors = c("#9E0142", "#D53E4F", "#F46D43", 
      "#FDAE61", "#FEE08B", "#FFFFBF", "#E6F598", "#ABDDA4", "#66C2A5", "#3288BD", "#5E4FA2")),
                 domain = list(x = c(0.5, 1), y = c(0.75, 1)))

fig <-fig %>%layout(font=t,showlegend = T,
          grid=list(rows=3, columns=2),
          xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
          yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

fig
  

Вот некоторые примеры данных: https://docs.google.com/spreadsheets/d/1yarGI5ee5ST_uzeQI-Xa2lk681d24vbIurUl6Rj58YY/edit?usp=sharing

Ответ №1:

Жирные метки могут быть получены с помощью атрибута texttemplate следующим образом:

texttemplate = '<b>%{label}</br></br>%{percent}</b>'

Для настройки полей используйте атрибут layout margin , например

 margin = list(b = 200, l = 100)
  

Используя пример данных отсюда:

 library(plotly)
USPersonalExpenditure <- data.frame("Categorie"=rownames(USPersonalExpenditure), USPersonalExpenditure)
data <- USPersonalExpenditure[,c('Categorie', 'X1960')]

p <- plot_ly(data, labels = ~Categorie, values = ~X1960, type = 'pie',sort = FALSE,
             textinfo = 'label percent', 
             texttemplate = '<b>%{label}</br></br>%{percent}</b>', 
             textfont = list(color = '#000000'),
             marker = list(colors = c("#9E0142", "#D53E4F", "#F46D43", "#FDAE61", "#FEE08B", 
                                      "#FFFFBF","#E6F598", "#ABDDA4", "#66C2A5", "#3288BD", "#5E4FA2")))

t <- list(
  family = "Times New Roman",
  size = 15,
  color = 'black')

p %>% layout(font=t, margin = list(b = 200, l = 100))
  

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

Теперь ОТРЕДАКТИРУЙТЕ свои данные

 concWDper <- read.table(text = "Concentration   Compounds
           42   α-pinene
           10   β-pinene
           5    β-phellandrene
           13   camphene
           12   limonene
           3    tricyclene
           2    fenchene
           2    thujene
           7    cymene
           4    sabinene
           1    myrcene", header = TRUE)

t <- list(
  family = "Ariel",
  size = 15,
  color = 'black')

library(plotly)

fig <- plot_ly()
#####Fall/Winter Concentration
fig <-fig%>% add_pie(concWDper,
                     labels = concWDper$Compounds, 
                     values = concWDper$Concentration, 
                     type = 'pie',
                     sort = FALSE,
                     textinfo = '', 
                     texttemplate = '<b>%{percent}</b>',
                     textfont = list(color = '#000000'),
                     marker = list(colors = c("#9E0142", "#D53E4F", 
                                              "#F46D43","#FDAE61", "#FEE08B", "#FFFFBF", "#E6F598", 
                                              "#ABDDA4", "#66C2A5", "#3288BD", "#5E4FA2")),
                     domain = list(x = c(0, 0.5), y = c(0.75, 1)))

fig <-fig%>% add_pie(data = concWDper, 
                     labels = concWDper$Compounds, 
                     values = concWDper$Concentration, type = 'pie',sort = FALSE,
                     textinfo = '', 
                     texttemplate = '<b>%{percent}</b>',
                     textfont = list(color = '#000000'),
                     marker = list(colors = c("#9E0142", "#D53E4F", "#F46D43", 
                                              "#FDAE61", "#FEE08B", "#FFFFBF", "#E6F598", "#ABDDA4", "#66C2A5", "#3288BD", "#5E4FA2")),
                     domain = list(x = c(0.5, 1), y = c(0.75, 1)))

fig <-fig %>%layout(font=t,showlegend = T,
                    grid=list(rows=3, columns=2),
                    xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
                    yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

fig
  

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

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

1. Это для R? texttemplate, похоже, не существует.

2. Конечно, это для R. См https://plotly.com/r/text-and-annotations/#customize-displayed-text-with-a-text-template . . В чем проблема с кодом? Какую версию plotly вы используете? Мой вариант — 4.9.2.1.

3. У меня та же версия. Таким образом, он выдает ошибку: «Предупреждающее сообщение: объекты ‘pie’ не имеют этих атрибутов: допустимые атрибуты ‘texttemplate’ включают:» и затем все разрешенные атрибуты

4. Хм. Я не получаю этого предупреждения. Кроме того, я только что взглянул на атрибуты круговой диаграммы, через plotly::schema() которые также перечислены списки texttemplate . Но работает ли код? В конце концов, это всего лишь предупреждение. Некоторое время назад у меня была аналогичная проблема, когда r-plotly жаловался на атрибут. Но код все равно работал.

5. Хорошо, я только что все обновил и заставил это работать! Спасибо! Последний вопрос: как мне выделить легенду жирным шрифтом? Глядя на атрибуты макета, я подумал, что это будет похоже, например, применение LayoutTemplate = ‘<b>%{Compounds}</b>’, но это не сработало