2

パッケージ 'directlabels' は、明らかにデフォルトで、ラベルのフォント サイズを小さくして、各ラベルを通常のプロット エリア内に収めようとします。

以下、Label for OneLabel for TwoおよびLabel for Threeeeeeeeeeはすべて同じフォント サイズである必要があり、ラベルがプロット領域からはみ出しても問題ありません (clipカスタム注釈の表示が無効になっているため)。

実際、設定したいかもしれませんがxlim=c(1,3)、ラベルは完全にプロット領域の外にある必要があります。以下の画像の左の列はxlim=c(1,3.4)、右の列は ですxlim=c(1,3)

ラベルのフォントサイズをリセットするために使用できることを知りましたcexが、パッケージのラベル分離アルゴリズムと競合しているようです。下の画像の一番上の行は no のcex場合で、一番下の行は の場合cex=1です。

ラベルが重ならないようにし、同じフォント サイズで、 と で動作する方法を見つけることは素晴らしいことxlim=c(1,3)ですxlim=c(1,3.4)

ここに画像の説明を入力

library(reshape)
library(ggplot2)
library(directlabels)

df=data.frame(
  x = 1:3,
  One=c(12, 8, 13),
  Two=c(13, 7, 11),
  Threeeeeeeeee=c(11, 9, 11))

df.d.melt = melt(df[,c("x","One","Two","Threeeeeeeeee")], id.vars="x")
df.d.melt$variable1 = df.d.melt$variable
levels(df.d.melt$variable1) = paste("","Lable for",levels(df.d.melt$variable1))

p = ggplot(df.d.melt, aes(x=x, y=value, color=variable)) + 
  geom_line(size=1.1) +
  geom_text(aes(x =3.4, y=8, label="Custom Outside\nChart Annotation"), show_guide=FALSE) + 
  coord_cartesian(xlim=c(1,3.4)) +
  geom_dl(aes(label=variable1), method=list("last.qp", cex=1), show_guide=FALSE) + 
  theme(legend.position="top",plot.margin = unit(c(0, 4, 0, 0), "cm")) 

p1 <- ggplot_gtable(ggplot_build(p))
p1$layout$clip[p1$layout$name=="panel"] <- "off"
grid.draw(p1)
4

2 に答える 2

1

デフォルトでは、 directlabels は、プロット領域の内側に読み取り可能なラベルが必要であると想定しているため、reduce.cex.lrを使用してラベルが内側に収まるようにテキスト サイズを縮小します。プロットの外側のラベルは、テキスト サイズを縮小しないカスタムの配置方法を定義することで実現できます。

do.not.reduce <-
  list(cex=2, "last.points", "calc.boxes",
       qp.labels("y", "bottom", "top", make.tiebreaker("x", "y")))

WithLegend <- ggplot(df.d.melt, aes(x=x, y=value, color=variable)) + 
  geom_line(size=1.1) +
  geom_text(aes(x =3.4, y=8, label="Custom Outside\nChart Annotation")) + 
  coord_cartesian(xlim=c(1,3)) +
  theme(plot.margin = unit(c(0, 4, 0, 0), "cm"))
WithLabels <- direct.label(WithLegend, "do.not.reduce")
GTable <- ggplot_gtable(ggplot_build(WithLabels))
GTable$layout$clip[GTable$layout$name=="panel"] <- "off"
grid.draw(GTable)
于 2013-11-13T02:04:31.400 に答える
0

実用的な解決策は、ラベルをチャートの左側にある追加の非表示の短い線 (たとえば、x=1に定義x=1.001) に付けて、directlabels を使用trans_newして注釈を目的の x 値に移動することです。

于 2012-12-14T16:09:17.870 に答える