【发布时间】: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))
【问题讨论】: