簡體   English   中英

如何在ggplot2中將圖例的標簽放在圖中

[英]How to put labels of legend inside plot in ggplot2

上下文:R / ggplot2。

有沒有一種自動化的方式(甚至是手動方式)將圖例因子放在圖中,就像這里的能量(Co,4,6,10,...),而不是將它們放在旁邊的常規圖例框中情節?

資料來源:放射腫瘤學物理學:教師和學生手冊,EB。 Podgorsak

資料來源:放射腫瘤學物理學:教師和學生手冊,EB。 Podgorsak

所以這似乎很接近。 我將其描述為“半自動”:肯定需要進行一些調整,但大部分工作都是為你完成的......

棘手的一點不是放置文本標簽( 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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM