40

地図などの背景で読みやすくするために、ggplot2 で「アウトライン化されたテキスト」を描画する方法があるかどうかを知りたいです。たとえば、小さな白い境界線を持つ黒いテキストです。

理想的には、Google マップで表示できるのと同じタイプのラベルを実現したいと考えています。

ここに画像の説明を入力

ヒントをよろしくお願いします!

4

4 に答える 4

16

これは、パッケージshadowtext内の関数から一般的な考え方を実装するアプローチです。TeachingDemos真ん中の部分のコードは、いくつかのことを単純化するために関数にラップすることができます。この例は、RichieCottonの回答から露骨に盗まれています。

d <- diamonds[sample(nrow(diamonds), 10), ]  


p <- ggplot(d, aes(carat, price) ) 
theta <- seq(pi/8, 2*pi, length.out=16)
xo <- diff(range(d$carat))/200
yo <- diff(range(d$price))/200
for(i in theta) {
    p <- p + geom_text( 
        bquote(aes(x=carat+.(cos(i)*xo),y=price+.(sin(i)*yo),label=cut)), 
                    size=12, colour='black' )
}
p <- p + geom_text( aes(label=cut), size=12, colour='white' )
p <- p + opts( panel.background=theme_rect(fill='green' ) )
print(p)

ここに画像の説明を入力してください

于 2012-05-21T20:03:06.020 に答える
7

理想的または非常に柔軟ではありませんが、太字のモノテキストを描画してから、標準のモノテキストを上に描画することで効果を得ることができます.

緑のパネルの背景を使用してマップをシミュレートしました。

d <- diamonds[sample(nrow(diamonds), 10), ]

(p <- ggplot(d, aes(carat, price)) +
  geom_text(
    aes(label = cut, family = "mono", fontface = "bold"), 
    size = 12, 
    colour = "black"
  ) +
  geom_text(
    aes(label = cut, family = "mono"), 
    size = 12, 
    colour = "white"
  ) +
  opts(panel.background = theme_rect(fill = "green"))
)

ダイヤモンド データセットを使用した text-on-bold-text

于 2012-05-21T16:49:17.523 に答える
2

Greg Snow が受け入れた回答は、 の代わりに がggplot2@2.2.1呼び出されたため、では機能しなくなりました。aesaes_q

使用する

for(i in theta) {
  p <- p + geom_text( 
    aes_q(x = bquote(carat+.(cos(i)*xo)),
          y = bquote(price+.(sin(i)*yo)),
          label = ~cut), 
    size=12, colour='black' )
}

代わりは。

于 2017-06-13T09:00:11.950 に答える