1)ソリューションcowplot::draw_label()
draw_label()
パッケージの注釈関数を使用することもできます(このcowplot
説明で提案されています)。必要な数のテキスト行を呼び出すことができます。と組み合わせて使用すると、キャンバス/シートの任意の場所に、0から1の範囲の座標(キャンバス全体に対して)で注釈を付けることができます。cowplot::draw_label()
cowplot::draw_label()
cowplot::ggdraw()
注釈の位置を微調整し、カスタム軸のタイトル用に十分なスペースを確保する必要があります。
cowplot
パッケージは現在、デフォルトのggplotテーマを変更しているため、必要に応じて、ここでtheme_set()
説明するようにパッケージをロードした後に使用することに注意してください。
cowplot::draw_label()
関数が内部で使用することにも注意してくださいggplot2::annotation_custom()
。これについては、以下の後半で詳しく説明します。
library(ggplot2)
library(cowplot)
#>
#> Attaching package: 'cowplot'
#> The following object is masked from 'package:ggplot2':
#>
#> ggsave
# If needed, revert to default theme (cowplot modifies the theme);
# theme_set(theme_grey())
p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
# Make enough space for the custom two lines axis title
p <- p +
xlab("") + # empty label
# Tweak the margins (push the label down by forcing a wider top margin)
theme(axis.title.x = element_text(size = 10, # also adjust text size if needed
margin = margin(t = 10, r = 0, b = 0, l = 0,
unit = "mm")))
# The two lines we wish on the plot
line_1 <- "A long string of text for the purpose"
line_2 <- expression(paste("of illustrating my point" [reported]))
# Or avoid paste() (is not actually needed)
# line_2 <- expression("of illustrating my point" [reported])
# Call cowplot::draw_label two times to plot two lines of text
ggdraw(p) +
draw_label(line_1, x = 0.55, y = 0.075) + # use relative coordinates for positioning
draw_label(line_2, x = 0.55, y = 0.025)
cowplot::draw_label()
は、クリッピングをオフに設定することと組み合わせて使用することもできますcoord_cartesian(clip = "off")
。これにより、キャンバス上の任意の場所にプロットできます。今回は相対座標を使用しなくなりましたが、プロット/データからの座標(絶対座標)を使用します。
# Other two expressions
line_1b <- expression(bolditalic('First line'))
line_2b <- expression(integral(f(x)*dx, a, b))
p + coord_cartesian(clip = "off") + # allows plotting anywhere on the canvas
draw_label(line_1b, x = 3.5, y = 8.2) + # use absolute coordinates for positioning
draw_label(line_2b, x = 3.5, y = 6)
reprexパッケージ(v0.2.1)によって2019-01-14に作成されました
2)ソリューションggplot2::annotation_custom()
前述のようにcowplot::draw_label()
、はのラッパーですggplot2::annotation_custom()
。したがって、の代わりに、クリッピングをオフに設定することとcowplot::draw_label()
直接ggplot2::annotation_custom()
組み合わせて使用できます。これは、このプルリクエストcoord_cartesian(clip = "off")
をマージすることで利用可能になりました。
ただし、このアプローチはより冗長であり、より多くの座標引数があり、を使用する必要がありますgrid::textGrob()
。
# Some other two lines we wish on the plot as OX axis title
line_1c <- expression("Various fonts:" ~ bolditalic("bolditalic") ~ bold("bold") ~ italic("italic"))
line_2c <- expression("this" ~~ sqrt(x, y) ~~ "or this" ~~ sum(x[i], i==1, n) ~~ "math expression")
# the ~~ ads a bit more space than ~ between the expression's components
p + coord_cartesian(clip = "off") +
annotation_custom(grid::textGrob(line_1c), xmin = 3.5, xmax = 3.5, ymin = 7.3, ymax = 7.3) +
annotation_custom(grid::textGrob(line_2c), xmin = 3.5, xmax = 3.5, ymin = 5.5, ymax = 5.5)
reprexパッケージ(v0.2.1)によって2019-01-14に作成されました