4

2 つのベン図を 1 つのグラフに入れようとしています。つまり、最初に par(mfrow=c(1,2)) を使用しています。ただし、パッケージでVenn()関数を使用すると:Vennerable

VennCompare = Venn(SetNames = c("A", "B", "C"), Weight = c(0, 38, 1, 0, 1, 80, 0, 14))
pdf(file="Venn.pdf", width=12, height=6)
par(mfrow=c(1,2))
plot(VennCompare, doWeights=FALSE)
plot(VennCompare, doWeights=TRUE, show = list(SetLabels = TRUE, Faces = FALSE))
dev.off()

結果の pdf ファイルには 2 ページが含まれ、各ページには 1 つのベン図があります。

2 つの図を 1 ページに (つまり、並べて) 表示するにはどうすればよいですか?

4

3 に答える 3

4

コメントで既に説明したように、Vennerable はグリッド グラフィックを使用し、パッケージ関数内のグリッド パラメーターを修正します。この種の機能をパッケージに追加できるかどうか、パッケージのメンテナーに親切に尋ねる必要があるかもしれませんが、それまでの間、あなたが望むことを可能にするハックのスケッチを提供します:

makevp.eqsc最初のコマンドでは、グリッド定義が含まれていると思われる呼び出された関数を編集できます。

trace("makevp.eqsc",edit=TRUE) 

元のコードは次のようになります。

function (xrange, yrange) 
{
    pushViewport(plotViewport(name = "Vennmar", c(1, 1, 1, 1)))
    pushViewport(viewport(name = "Vennlay", layout = grid.layout(1, 
        1, widths = diff(xrange), heights = diff(yrange), respect = TRUE)))
    pushViewport(viewport(name = "Vennvp", layout.pos.row = 1, 
        layout.pos.col = 1, xscale = xrange, yscale = yrange))
}

最も関連性の高い部分はgrid.layout、描画するグリッドの種類を示す です。また、layout.pos.row と layout.pos.col も重要で、描画する位置を示します。たとえば、次のようにコードを変更します。

function (xrange, yrange) 
{
    pushViewport(plotViewport(name = "Vennmar", c(1, 1, 1, 1)))
    pushViewport(viewport(name = "Vennlay", layout = grid.layout(2, 
        1, widths = diff(xrange), heights = diff(yrange), respect = TRUE)))
    pushViewport(viewport(name = "Vennvp", layout.pos.row = number, 
        layout.pos.col = 1, xscale = xrange, yscale = yrange))
} 

これで、次のように 2 つの積み上げグラフが得られます。

number<-1 #change the argument inside of makevp.eqsc
plot(VennCompare, doWeights=FALSE)
number<-2
plot(VennCompare, doWeights=TRUE, 
  show = list(SetLabels = TRUE, Faces = FALSE),add=TRUE) #note add=TRUE

これはあまり見栄えがよくありませんが、変更makevp.eqscすることで、おそらくより良い結果を得ることができます。

于 2013-03-09T20:09:52.143 に答える
3

私はそのパッケージをインストールできませんでしたが、ここで役立つかもしれないトリックは、grid.grab を使用して、他の場所に配置できる GLOB に図面をキャプチャすることです。

library(grid)

myplot <- function(){

  pushViewport(viewport(x=0.5,width=1, just=0.5))
  grid.rect(gp=gpar(fill=grey(runif(1, 0.2, 0.8))))
  grid.points()
  popViewport()

}

p1 <- grid.grabExpr(myplot())
p2 <- grid.grabExpr(myplot())

library(gridExtra)

grid.arrange(p1, p2, ncol=2) 
于 2013-03-09T20:37:41.067 に答える
0

これを試して:

v <- Venn(n=2)
plot(v)
grid.text("Title", vp = viewport(x=0.5, y=.9, w=unit(1, "npc"), h=unit(1, "npc")))
于 2014-02-13T05:24:59.590 に答える