使用此代码:
library(ggplot2)
p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p + geom_point() + geom_text(aes(wt, mpg, label=row.names(mtcars)))
我得到了这张图:
如何修改上面的代码,使其仅标记wt > 4
或mpg > 25
的位置,
而其余的点仍然没有标记。
答案 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))
结果情节:
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)
答案 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))