我想在我的情节中添加一个新的传奇。但我希望这个传奇都是定制的。 我通过geom_text_repel为每个点添加标签。 新图例描述了标签的字符。
答案 0 :(得分:0)
您可以通过创建" dummy"来创建图例。包含图例键标签的数据。然后你会"情节"虚拟数据以生成图例,但使用空白符号以便实际上不会绘制任何内容。
library(ggplot2)
theme_set(theme_classic())
# Fake data for plotting
set.seed(2)
val = sapply(sample(1:4,30,replace=TRUE), function(x) paste(sort(sample(c('c','u','x','t'), x)), collapse=""))
dat = data.frame(x=runif(30), y=runif(30), val)
# Dummy data for creating the legend
leg = data.frame(x1=rep(0,4), y1=rep(0,4), ll = c("c: coor","u: url","x: xss","t: text"))
ggplot(data=dat, aes(x,y)) +
geom_text(aes(label=val)) +
geom_point(data=leg, aes(x1, y1, colour=ll)) +
theme(legend.key.size=unit(15,"pt"),
legend.title=element_blank(),
legend.margin=margin(l=0),
legend.text=element_text(size=12)) +
scale_colour_manual(values=rep("#00000000", 4))
你也可以使用geom_text
来放置"传奇"直接注释:
leg = data.frame(ll = sort(c("c: coor","u: url","x: xss","t: text")))
leg$y = seq(mean(dat$y) + 0.05*diff(range(dat$y)),
mean(dat$y) - 0.05*diff(range(dat$y)),
length=4)
leg$x = 1.07 * max(dat$x)
ggplot(data=dat, aes(x,y)) +
geom_text(aes(label=val)) +
geom_text(dat=leg, aes(label=ll), hjust=0, colour="red") +
annotate(xmin=1.05 * max(dat$x), xmax=1.18 * max(dat$x), ymin=0.95*min(leg$y), ymax=1.04*max(leg$y),
geom="rect", fill=NA, colour="black") +
scale_x_continuous(limits=c(min(dat$x), 1.18*max(dat$x)))