2017-10-10 26 views
0

私のプロットに新しい凡例を追加したい。しかし、私は伝説がすべてカスタマイズされていることを願っています。 すべてのポイントのラベルをgeom_text_repelで追加します。 新しい凡例には、ラベルの文字が記述されています。ggplotでプロットするカスタム凡例を追加するには?

Before

After

+0

は、なぜあなたはラベルのために '' geom_label()を使用していません? – djhurio

+0

私はRとggplot2についてよく知らなかった。私はgeom_label()をチェックします。 – Clifford

答えて

0

あなたは伝説のキーラベルを含む「ダミー」データを作成することにより、凡例を作成することができます。凡例を生成するためにダミーデータを "プロット"しますが、何も実際にプロットされないように空白のシンボルを使用します。

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)) 

enter image description here

ます。また、直接 "伝説" の注釈を配置する 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))) 

enter image description here

+0

それは動作します。どうもありがとうございました。しかし、プロット内のテキストラベル間の重複を避けることは可能ですか? – Clifford

関連する問題