显示 R 中图例的选择级别

Posted

技术标签:

【中文标题】显示 R 中图例的选择级别【英文标题】:Showing select levels for a legend in R 【发布时间】:2020-02-05 07:11:56 【问题描述】:

我有一个长格式的数据框,其中包含按不同年龄组的鸟类分组的不同门的相对丰度。我有 44 个不同的门,我想绘制不同年龄组相对丰度的堆积条形图,但只想显示前 5/10 丰富分类群的图例。

我已经浏览过Remove legend entries for some factors levels 和How do I display only selected items in a ggplot2 legend?。第二个链接准确地描述了我想要做什么,但是在scale_fill_manual() 中使用break= 参数的解决方案对我不起作用,因为它给出了以下错误:

Error: Insufficient values in manual scale. 44 needed but only 0 provided.

我使用的ggplot代码如下:

ggplot(df2, aes(x = variable, y = value, fill = taxa )) + 
  geom_bar(stat = "identity") +
  xlab("\nAge and Nest") +
  ylab("Relative Abund\n") +
  scale_x_discrete(limits=c('Nest','3', '6', '9', '12')) +
  scale_fill_manual(breaks=c("k__Bacteria;p__Proteobacteria",  "k__Bacteria;p__Firmicutes", "k__Bacteria;p__Actinobacteria", "k__Bacteria;p__Bacteroidetes" ,
                             "k__Bacteria;p__Tenericutes", "k__Bacteria;p__Acidobacteria", "k__Bacteria;p__Cyanobacteria", "k__Bacteria;p__Verrucomicrobia",
                             "k__Bacteria;p__Planctomycetes", "k__Bacteria;p__Chlamydia"))+
  theme_bw()

类似于实际数据的玩具数据格式如下所示:

taxa                           variable         value
k__Bacteria;p__Firmicutes           6             0.36
k__Bacteria;p__Acidobacteria        6             0.0025
k__Bacteria;p__Cyanobacteria        6             0.01
k__Bacteria;p__Planctomycetes       6             0.004
...                                 ...           ...
k__Bacteria;p__Acidobacteria        9             0.1025
k__Bacteria;p__Firmicutes           9             0.086
k__Bacteria;p__Planctomycetes       9             0.054
k__Bacteria;p__Cyanobacteria        9             0.017

编辑: 可重现的示例数据如下:

df <- data.frame("taxa" = c("A", "B", "C", "D" , "D", "C", "A", "B", "A", "C", "D", "B") , "variable" = c(rep(3,4), rep(6,4), rep(9,4)), "values" = c(0.02, 0.08, 0.75,0.15,  0.08, 0.75, 0.15,0.02, 0.02, 0.02, 0.06, 0.90))

【问题讨论】:

【参考方案1】:

使用values 参数提供所有值,然后使用breaks 显示选定的值。您没有提供可重现的数据,所以我将使用一个可重现的示例,您应该能够将其应用于您的数据:

ggplot(mtcars, aes(x = mpg, y = wt, colour = as.factor(cyl))) +
    geom_col() +
    scale_colour_manual(values = unique(mtcars$cyl), breaks = c("4","6"))

cyl 的可能值为 4,6 或 8;对于breaks,我们只是在图例中显示了 4 和 6。

您的values 参数可能类似于values = unique(df$taxa)

【讨论】:

感谢您的回复。我找到了它不起作用的原因。这是因为“分类单元”列不是我的数据框中的一个因素。欣赏它。 所以我改变了你的解决方案,以便堆叠的条形图填充不同的颜色,并且由于某种原因颜色方案完全改变了它之前的颜色,对此有什么见解吗?除了fill=as.factor(taxa),我使用的代码和你的一样

以上是关于显示 R 中图例的选择级别的主要内容,如果未能解决你的问题,请参考以下文章

R中自定义标记的传单图例

当数据中不存在分组变量的所有级别时,绘图之间的颜色比例和图例一致

Grafana Loki LogQL:过滤图例值

plotly:单击图例中的点时突出显示(暗淡),而不是过滤

AmCharts v3 有选择地隐藏图表图例项(不是切换图表)

如何使用选择图例(matplotlib)自动缩放图形?