具有不同列的 R plot_ly pieplot 图例

Posted

技术标签:

【中文标题】具有不同列的 R plot_ly pieplot 图例【英文标题】:R plot_ly pieplot legend with different column 【发布时间】:2020-05-01 13:21:40 【问题描述】:

我有这个数据框用于使用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"))

我希望饼图使用 col 作为颜色、genus 作为标签以及 phylumcol 列作为图例名称和颜色来表示 sunra 丰度(它们总和为 100) , 分别。 有了这段代码,我几乎完成了所有工作,因为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))

这就是我想要的传说:

有什么线索吗?

【问题讨论】:

【参考方案1】:

如果我理解正确,您希望标签保持原样,并且更改图例中显示的文本。如果是这种情况,您可以通过以下方法轻松获得您想要的东西:


我可以使用tricky 来处理图例文本,因此为了使事情尽可能简单,请不要理会图例,而是编辑标签。只需在piedat 中添加另一列,由phylumsunra 组成,将labels = ~genus 更改为labels = ~phylum,将textinfo = 'label+percent' 更改为textinfo = 'text' 并在add_trace() 中包含text=~custom 以获得:

完整代码:

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

【讨论】:

这个解决方案的问题是,如果你已经注意到,一些信息已经丢失,即紫色扇区应该是Prevotella 19.5和Bacteroides 1.1的2个扇区,但是Prevotella扇区已经丢失,并且拟杆菌属的代表不是真实的...... @ALG 啊,所以这里真正的问题是您想在图表中将拟杆菌属和普雷沃菌属显示为不同的类别,但在图例中将两者显示为一组? 就是这样!保持图表原样,但根据颜色对图例进行分组。 @ALG 不确定是否可行。我明天再看看。

以上是关于具有不同列的 R plot_ly pieplot 图例的主要内容,如果未能解决你的问题,请参考以下文章

如何使用R在plot_ly中为子图提供字幕

R 具有自定义线型的多线绘图图

在 R 中使用 plot_ly 单独更改图例

R中的plot_ly函数

r plot_ly scatter 中的自定义颜色范围

为啥 plot_ly 饼图总是将 R 中的第 5 个值文本从白色变为黑色?