我正在尝试使用geom_point
来说明我的数据计数。我还想用geom_text
在我的图表中注释几个点。当我将调用添加到geom_text
时,它似乎正在绘制图例中点下方的内容。我试过扭转层的顺序无济于事。我无法理解为什么会这样做。谁看过这个吗?
set.seed(42)
df <- data.frame(x = 1:10
, y = 1:10
, label = sample(LETTERS,10, replace = TRUE)
, count = sample(1:300, 10, replace = FALSE)
)
p <- ggplot(data = df, aes(x = x, y = y, size = count)) + geom_point()
p + geom_text(aes(label = label, size = 150, vjust = 2))
答案 0 :(得分:25)
这一直发生在我身上。诀窍是知道aes()
将数据映射到美学。如果没有要映射的数据(例如,如果您确定了单个值),则没有理由使用aes()
。我相信只有aes()
内的东西会出现在你的传奇中。
此外,当您在ggplot(aes())
内指定映射时,这些映射将应用于每个后续层。这对你的x和y有好处,因为geom_point
和geom_text
都使用它们。这对size = count
不利,因为这只适用于这些点。
所以这些是我防止这类事情的两条规则:
aes()
中。如果参数采用单个预定值,则将其传递给aes()
的外层。ggplot(aes())
内部映射数据。否则,将其映射到图层级别。所以我会这样画出来:
p <- ggplot(data = df, aes(x = x, y = y)) + geom_point(aes(size = count))
p + geom_text(aes(label = label), size = 4, vjust = 2)
答案 1 :(得分:18)
或者,如果你需要在aes中指定文本的大小,那么legend = FALSE会禁止绘制geom的图例:
p <- ggplot(data = df, aes(x = x, y = y, size = count)) + geom_point()
p + geom_text(aes(label = label, size = 150, vjust = 2), show_guide = FALSE)