ggplot图例问题w/geom_point和geom_text

Cha*_*ase 16 r legend ggplot2

我试图用来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))
Run Code Online (Sandbox Code Playgroud)

替代文字

Mat*_*ker 25

这一直发生在我身上.诀窍是知道aes()将数据映射到美学.如果没有要映射的数据(例如,如果您确定了单个值),则没有理由使用aes().我相信只有一个内心的东西aes()会出现在你的传奇中.

此外,当您在其中指定映射时ggplot(aes()),这些映射将应用于每个后续层.这是对你的X和Y,因为两者geom_pointgeom_text使用它们.这很糟糕size = count,因为这只适用于积分.

所以这些是我防止这类事情的两条规则:

  1. 只将基于数据的映射放在其中aes().如果参数走的是一条单一的预先确定的值,将它传递给层外面aes().
  2. 仅为将使用它的那些图层映射数据.推论: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) 
Run Code Online (Sandbox Code Playgroud)

  • 你的两条规则是相关的! (2认同)

koh*_*ske 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)
Run Code Online (Sandbox Code Playgroud)

  • 只是一个小信息:"legend"已被"show_guides"取代:geom_XXX和stat_XXX中的"legend"参数已被弃用.使用show_guide = TRUE或show_guide = FALSE进行显示或取消指南显示." (2认同)