代码之家  ›  专栏  ›  技术社区  ›  Chase

ggplot图例问题w/geom_point和geom_text

  •  16
  • Chase  · 技术社区  · 14 年前

    我想用 geom_point 来说明我的数据的数量。我还想用 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))
    

    alt text

    2 回复  |  直到 10 年前
        1
  •  25
  •   Matt Parker    14 年前

    这件事一直发生在我身上。关键是要知道 aes() 将数据映射到美学。如果没有要映射的数据(例如,如果有一个您确定的值),则没有理由使用 aes() . 我相信 aes() 会出现在你的传说中。

    此外,当您在 ggplot(aes()) ,这些映射适用于 每一层 . 这对你的x和y都有好处 geom_point geom_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) 
    
        2
  •  18
  •   Roman LuÅ¡trik    11 年前

    或者,如果需要指定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)