R plot_ly pieplot легенда с другим столбцом - PullRequest
1 голос
/ 14 января 2020

У меня есть этот фрейм данных для построения графика ap ie с функцией plot_ly():

piedat <- data.frame("phylum" = c("Non-classified genera", "Genera with RA < 1%", "Firmicutes", "Fibrobacteres", "Bacteroidetes", "Bacteroidetes"),
                     "genus" = c("Unclassified", "RA < 1%", "Clostridium", "Fibrobacter", "Bacteroides", "Prevotella"),
                     "sunra" = c(51.123358, 24.086378, 1.798356, 2.405086, 1.115162, 19.471660),
                     "col" = c("#F8766D", "#A3A500", "#00BF7D", "#00B0F6", "#E76BF3", "#E76BF3"))

Я хочу, чтобы график p ie представлял значения sunra (они составляют 100) используя col в качестве цвета, genus в качестве меток и столбцы phylum и col для имен и цвета легенды соответственно. С этим кодом мне удалось сделать почти все, так как легенда все еще остается с genus именами:

pie <- plot_ly(piedat) %>%
  add_trace(labels = ~genus, values = ~sunra, name = "phylum", type = 'pie', textposition = 'auto', sort = F, 
            textinfo = 'label+percent', textfont = list(size = 14), marker = list(line = list(width = 1))) %>% 
  layout(autosize = T, showlegend = T, colorway = piedat$col,
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

enter image description here

Это легенда, которую я хочу:

enter image description here

Любые подсказки?

1 Ответ

0 голосов
/ 14 января 2020

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


Манипулирование текстом легенды, которую я умышленно могу сделать, может быть хитрым , так что все будет так просто, как: возможно, оставьте легенду в покое, и вместо этого отредактируйте метки. Просто добавьте еще один столбец к piedat, состоящему из phylum и sunra, измените labels = ~genus на labels = ~phylum, измените textinfo = 'label+percent' на textinfo = 'text' и включите text=~custom в add_trace(), чтобы получить:

enter image description here

Полный код:

piedat <- data.frame("phylum" = c("Non-classified genera", "Genera with RA < 1%", "Firmicutes", "Fibrobacteres", "Bacteroidetes", "Bacteroidetes"),
                     "genus" = c("Unclassified", "RA < 1%", "Clostridium", "Fibrobacter", "Bacteroides", "Prevotella"),
                     "sunra" = c(51.123358, 24.086378, 1.798356, 2.405086, 1.115162, 19.471660),
                     "col" = c("#F8766D", "#A3A500", "#00BF7D", "#00B0F6", "#E76BF3", "#E76BF3"))

piedat$custom <- paste(piedat$genus, format(piedat$sunra, digits=2))

pie <- plot_ly(piedat) %>%
  add_trace(labels = ~phylum, values = ~sunra, name = "phylum", type = 'pie', textposition = 'auto', sort = F, 
            textinfo = 'text', text=~custom, textfont = list(size = 14), marker = list(line = list(width = 1))) %>% 
  layout(autosize = T, showlegend = T, colorway = piedat$col,
         xaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

pie
...