如何在ggplot2中将图例的标签放在图中

时间:2014-04-20 23:26:49

标签: r ggplot2

背景:R / ggplot2。

是否有自动方式(甚至手动方式)将图例因子放在图中,就像这里的能量一样(Co,4,6,10,...),而不是将它们放在常规的图例框中情节旁边?

Source: Radiation Oncology Physics: A Handbook for Teachers and Students, EB. Podgorsak

资料来源:放射肿瘤物理学:教师和学生手册,EB。 Podgorsak

1 个答案:

答案 0 :(得分:6)

所以这似乎很接近。我将其描述为"半自动":确实需要进行一些调整,但大部分工作都是为你完成的......

棘手的一点不是放置文本标签(geom_text(...)),而是在绘制的曲线中创建中断。这是通过geom_rect(...)完成的,其中矩形的宽度设置为最大标签宽度,使用strwidth(...)确定。

# create sample data
df <- data.frame(x=rep(seq(0,20,.01),5),k=rep(1:5,each=2001))
df$y <- with(df,x*exp(-x/k))

library(ggplot2)
eps.x <- max(strwidth(df$k))  # maximum width of legend label
eps.y <- eps.x*diff(range(df$y))/diff(range(df$x))
ggplot(df,aes(x,y))+
  geom_line(aes(group=factor(k)))+
  geom_rect(data=df[df$x==5,],
            aes(xmax=x+eps.x, xmin=x-eps.x, ymax=y+eps.y, ymin=y-eps.y),
            fill="white", colour=NA)+
  geom_text(data=df[df$x==5,],aes(x,y,label=k))+
  theme_bw()

如果你想给线条着色:

ggplot(df,aes(x,y))+
  geom_line(aes(color=factor(k)))+
  geom_rect(data=df[df$x==5,],
            aes(xmax=x+eps.x, xmin=x-eps.x, ymax=y+eps.y, ymin=y-eps.y),
            fill="white", colour=NA)+
  geom_text(data=df[df$x==5,],aes(x,y,label=k), colour="black")+
  scale_color_discrete(guide="none")+
  theme_bw()