21

長いファセット/ストリップ テキストが 2 行に分かれている次の ggplot2 グラフを考えてみましょう。テキストは、ファセット タイトル専用の領域からはみ出します。

library(ggplot2)
x <- c(1:3, 1:3)
y <- c(3:1, 1:3)
grp <- c(0, 0, 0, 1, 1, 1)
p <- qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp)
grob <- ggplotGrob(p)
strip.elem.y <- grid.ls(getGrob(grob, "strip.text.x", 
                grep=TRUE, global=TRUE))$name
grob <- geditGrob(grob, strip.elem.y[1], 
        label="First line and\n second line" )
grid.draw(grob)

ストリップ テキスト領域の高さを増やす方法はありますか?

4

3 に答える 3

47

ggplot2 は、 を使用してこれを行う組み込みの方法をサポートしていlabel_wrap_genます。

x <- c(1:3, 1:3)
y <- c(3:1, 1:3)
grp = c(rep("group 1 with a long name",3),rep("group 2 with a long name",3))
d = data.frame(x = x, y =y, grp = grp)
ggplot(d, aes(x=x,y=y)) + geom_line() + facet_wrap(~ grp, labeller = label_wrap_gen(width=10))
于 2017-08-30T21:45:08.823 に答える
17

2 行のラベルを使用できます。

grp <- c(rep("foo\nbar",3), 1, 1, 1)
qplot(x=x, y=y) + geom_line() + facet_wrap(~ grp)
于 2012-01-29T11:06:27.220 に答える
8

私はこれをさまざまな方法で試しましたがpaste(strwrap(text, width=40), collapse=" \n")、リスト全体からテキストの各ビットを連結せずに、単一行のデータの結果を得ることができずにイライラしました。

私に最適な解決策を思いつきました。以下のような関数を書きました。data列を持つデータフレームが与えられた場合text

wrapit <- function(text) {
  wtext <- paste(strwrap(text,width=40),collapse=" \n ")
  return(wtext)
}

data$wrapped_text <- llply(data$text, wrapit)
data$wrapped_text <- unlist(data$wrapped_text)

この関数を呼び出した後、labeller関数をwrapped_text列ではなく列に適用しましたtext

于 2012-12-09T04:24:49.880 に答える