2017-08-14 11 views
4

ggplot2を使用して円グラフを再作成するように求められましたが、プロットに2番目のキャプションを追加することが困難です。私はプロットの左下にキャプションが必要です右下。ggplot2プロットに基づいて極座標に第2キャプションを追加

1またはキャプションの配置のためhjustオプション(0左整列のために、1右揃え用)を使用して、他の得ることができます私の現在のアプローチ:

library(ggplot2) 
dat <- data.frame(variable = c("V1", "V2", "V3"), 
        value = c(.80,.50,.63)) 
p1 <- ggplot(dat, 
      aes(x = 1, y = value, fill = variable)) + 
    geom_bar(stat = "identity") + 
    coord_polar(theta = "y") + 
    theme(legend.position = 'none', 
     plot.caption = element_text(hjust = 1)) + 
    labs(caption = "RIGHT CAPTION") 

print(p1) 

これは、生産を:

Pie chart with right caption

私はannotate()を使用するいくつかのアプローチを見てきましたが、私はそれらをcoord_polar()と動作させるように見えません。

プロットの左側に2番目のキャプションを表示する方法を知っている人はいますか(水平に正しいキャプションに揃えられていますか)たぶん、左のキャプションだけを持つ空白のレイヤーをオーバーレイすることは可能ですか?

+0

私はハックのソリューションを使用して、上記の間違いではないが、私はもう少し再現可能であることこれを行う方法がある願っています。このソリューションでは、左と右のキャプションの間に含めるスペースの数が多くの試行錯誤を必要とし、プロットの保存/書き出し方法に応じて、その値が変更される可能性があります。 –

答えて

3

gridパッケージを使用すると、左側のキャプションを含むテキストgrobを追加することができます。

library(ggplot2) 
library(grid) 
dat <- data.frame(variable=c("V1", "V2", "V3"), value=c(.80,.50,.63)) 

p1 <- ggplot(dat, aes(x = 1, y = value, fill = variable)) + 
    geom_bar(stat = "identity") + 
    coord_polar(theta = "y") + 
    theme(legend.position='none', plot.caption=element_text(hjust=1)) + 
    labs(caption="RIGHT CAPTION") 

# Generate a ggplot2 plot grob 
p2 <- ggplotGrob(p1) 
# Find the grob tree containing the right caption (as child) 
k <- which(p2$layout$name=="caption") 
# Copy the "right caption" text grob in grbTxt 
grbTxt <- p2$grobs[[k]]$children[[1]] 

# Modify content and position of the text grob 
grbTxt$label <- "LEFT CAPTION" 
grbTxt$name <- "GRID.text.left" 
grbTxt$x <- unit(0,"npc") 
grbTxt$hjust <- 0 
grbTxt$gp$col <- "red" 

# Add grbTxt (left caption) to the title grob containing the right caption 
p2$grobs[[k]] <- addGrob(p2$grobs[[k]],grbTxt) 
grid.draw(p2) 

enter image description here

+0

非常にクール!ちょっと分かります。この場合、 'addGrobs()'は新しい子をキャプションリストに追加します。これを素早く見てみると、もともと 'p2 $ grobs [[k]]にあるものを上書きすると仮定していました。 –

+1

@Twitch_Cityはい、 'addGrobs'はキャプションgrob(' gTree')に新しい子を追加します。 'p2 $ grobs [[k]]を上書きすることはできません。そうでなければ、右(子)のキャプションが失われます。 –

関連する問題