5

いくつかの理由で、次のようなプロットにフレームを追加したい:

ここに画像の説明を入力

でこれを行うことはできますplotか? ggplotまたはqplotソリューションも大歓迎です。ありがとうございました。

4

3 に答える 3

6
set.seed(123); 
plot(x=rnorm(100, sd=1000), y=rnorm(100, sd=1000) ,ylab="", xlab="")
rect(xleft=par("usr")[1]*1.25, ybottom=par("usr")[3]*1.4, 
     xright=par("usr")[2]*1.1,ytop=par("usr")[4]*1.2, 
     lwd=5, border="orange", xpd=TRUE)

ここに画像の説明を入力

于 2012-12-09T06:22:39.153 に答える
5
qplot(x= disp , y = wt , data = mtcars) +
  theme(plot.background = element_rect(colour="#CF8057",size=10))

ここに画像の説明を入力

于 2012-12-09T06:18:49.977 に答える
4

実線の長方形を描画しprint(.., vp=..)、その上に ggplot をプロットして、わずかに縮小することができます。

これは素敵な小さな関数の例です:

borderize <- function(plotObj, thick=2, color="orange", alpha=0.8) {
  # thick should be a value between (1, 100)
  # alpha should be a value between (0, 1)

  # these could be modified for separate width/height thicknesses
  wd <- ht <-  (100 - thick) / 100
  x <- (1 - wd)  / 2 
  y <- (1 - ht) / 2

  # create a solid rectangle.  The plot will go over it. 
  grid.rect(y = 1, height = 1, just = c("center", "top"), gp=gpar(fill=color, alpha=alpha, lwd=0))

  # create the viewport
  vp.inner <- viewport(height=unit(ht, "npc"), width=unit(wd, "npc"), just=c("left","bottom"), y=y, x=x)

  print(plotObj, vp=vp.inner)

}

例えば:

myPlot <- ggplot(iris,aes(Sepal.Length,Sepal.Width)) + 
                 geom_point(aes(color=Species,shape=Species))

borderize(myPlot, thick=5, color="#CF8042")

ボーダー付きのggplot2

ggplot2 の theme() を使用してplot.background変更することもできます。 ただし、これは、境界線の太さ、フォント サイズなどに応じて、ラベルと凡例に影響を与えます。それが、ビューポートを使用することを好む理由です。panel.background

例えば:

plot.bg  <- theme(plot.background=element_rect(color="red", size=12))
panel.bg <- theme(panel.background=element_rect(color="blue", size=12))

plotObj + panel.bg + plot.bg

赤枠はplot、青枠はpanel

ここに画像の説明を入力
ボーダーがラベルにどのように食い込んでいるかに注意してください

ただし、使用する利点は、グラフplot.background全体をオブジェクトとして保存できることです。上記の方法ではできないことborderize

于 2012-12-09T05:59:06.430 に答える