如何使用GGPLOT geom_point()进行选择性标记

时间:2013-02-22 01:26:58

标签: r plot ggplot2

使用此代码:

library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p + geom_point() + geom_text(aes(wt, mpg, label=row.names(mtcars)))

我得到了这张图:

enter image description here

如何修改上面的代码,使其仅标记wt > 4mpg > 25的位置, 而其余的点仍然没有标记。

5 个答案:

答案 0 :(得分:45)

data提供geom_text参数:

library(ggplot2)
mtcars$name <- row.names(mtcars)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p + geom_point() + 
  geom_text(data=subset(mtcars, wt > 4 | mpg > 25),
            aes(wt,mpg,label=name))

结果情节:

plot1

PS:我真的不喜欢p + geom()构建ggplots的风格,我很确定hadley在原版的ggplot2书中做了这个,以展示对同一情节的不同修改,但人们似乎已经把它拿起并用它运行。我就是这样做的:

  • 只需将图表的不同组件与+一起添加,不要保存每个中间步骤。
  • 除非您确实需要,否则不要将其保存到变量中,如果您需要使用ggsave()
  • ,仍然可以将其保存到文件中
  • 在第一个ggplot电话中放置适用于整个情节的所有美学,只在必要时修改其他内容

我的版本:

ggplot(mtcars, aes(wt, mpg, label=name)) +
  geom_point() +
  geom_text(data=subset(mtcars, wt > 4 | mpg > 25))

答案 1 :(得分:5)

您可以将subset参数传递给图层。在您的情况下,这将需要将rownames作为列,以便正确评估它们。您需要显式加载plyr以获取函数.,这使得语法变得容易。

# shamelessly using @marius initial code
library(ggplot2)
library(plyr)
mtcars$name <- row.names(mtcars)
p <- ggplot(mtcars, aes(wt, mpg))

p + geom_point() + geom_text(aes(wt,mpg,label=name), subset = .(wt > 4 | mpg > 25))

答案 2 :(得分:2)

你可以得到一个额外的变量:

carnames <- row.names(mtcars)
carnames[with(mtcars, !(wt > 4 | mpg > 25))] <- ""

p + geom_point() + geom_text(aes(wt,mpg,label=carnames))

答案 3 :(得分:1)

ggplot2-like晶格解决方案: - )

  library(latticeExtra)
  xyplot(mpg~wt, data=mtcars,pch=19,
         panel =function(x,y,...){
         #  panel.xyplot(x,y,...)
           data=subset(mtcars, wt > 4 | mpg > 25)
           panel.text(data$wt,data$mpg,label=row.names(data),
                      col='red',cex=2)
         },par.settings = ggplot2like(), axis = axis.grid)

enter image description here

答案 4 :(得分:0)

library(ggrepel)

mtcars$name <- row.names(mtcars)

ggplot(mtcars, aes(wt, mpg, label=name)) +

geom_point() +

geom_text_repel(data=subset(mtcars, wt > 4 | mpg > 25), aes(label=name))