嗨我在尝试仅显示某些子集的标签时遇到了Aesthetics错误。例如。
library("ggplot2")
library(gplots)
library(ggrepel)
set.seed(10)
data <- data.frame(label=letters[1:21], number= runif(21, min=0, max=100))
data$label <-factor(data$label)
ggplot(data, aes(x=label, y=number, fill=data$label )) +
geom_bar(stat="identity") +
geom_text_repel(data= data[data$number > 80,], aes(label =data$label ),
arrow = arrow(length = unit(0.01, 'npc')), box.padding = unit(1.5, 'lines'),color="black" )
当我这样做时,我收到以下错误
Error: Aesthetics must be either length 1 or the same as the data (2): label, x, y, fill
即使我用c("label1","label2")
之类的向量替换标签
我仍然得到一个错误。
我做错了什么,但我无法弄清楚。我能做到这一点的唯一方法是创建一个具有相同长度的单独向量并将其用作标签,但我认为有一种方法可以直接进行子集化。谢谢!
答案 0 :(得分:3)
将代码更改为:
ggplot(data, aes(x=label, y=number, fill=data$label )) +
geom_bar(stat="identity") +
geom_text_repel(data= data[data$number > 80,], aes(label =label ), ##<- Change here
arrow = arrow(length = unit(0.01, 'npc')), box.padding = unit(1.5, 'lines'),color="black" )
问题是,在aes
内geom_text_repel()
的调用中,您使用data$label
,即21行数据框中的列,而您希望在label
内对data
进行评估数据的2行子集。
在这种情况下,您通过调用数据{{1}}来掩盖问题,如果您将其称为更有意义的内容,则可能更容易发现错误。