4

RStudioで2コマフィギュアを作ろうとしています。通常は十分に単純です:

par(mfrow=c(1,2)) #1*2 plotting window

ただし、scatterplot()car パッケージの関数を使用してプロットを作成すると、プロット ウィンドウのこの分割が上書きされるようです。

再現可能な例: 私が探している形式は、次の方法で生成できます。

par(mfrow=c(1,2))
plot(iris$Sepal.Length,iris$Sepal.Width)
plot(iris$Petal.Width,iris$Sepal.Width)

scatterplot()しかし、いくつかの理由で使用したいと思います。しかし、同じ書式設定のトリックをもう一度試してみると、うまくいきません。このブロックを試してください:

library(car)
par(mfrow=c(1,2))
scatterplot(Sepal.Length~Sepal.Width|Species,data=iris,grid="FALSE", boxplots="", reg.line="FALSE",pch=c(0,1,2))
scatterplot(Petal.Width~Sepal.Width|Species,data=iris,grid="FALSE", boxplots="", reg.line="FALSE",pch=c(0,1,2))

これに対する回避策を知っている人はいますか?

また、次の方法で別の構造化を試みました。

m<-rbind(c(1,2))
layout(m)

運がない。

更新この質問は主にこの質問の複製ですが、そのページに残された応答ではなく、基本的に scatterplot() が実際に par(mfrow) をオーバーライドすることを認める応答ではなく、回避策を探していることを除いて

4

1 に答える 1

1

rmarkdownチャンク引数を使用して、ドキュメントに図を並べて出力できますfig.show='hold'。別のオプションは、関数ggplot2の代わりにプロットを作成するために使用することです。cars scatterplot以下に両方のアプローチを示します。

ドキュメント内の並列cars::scatterplotプロットrmarkdown

以下は PDF 出力の例です。とout.width='3in'に関係なく、出力ドキュメントの各プロットの実際のサイズを設定します。ただし、縦横比とプロット エリアに対するテキスト サイズを調整および調整することはできます。fig.heightfig.widthfig.heightfig.width

---
title: "Untitled"
author: "eipi10"
date: "November 23, 2016"
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

```{r fig.show='hold', out.width='3in', fig.height=5, fig.width=5}
library(car)

scatterplot(Sepal.Length~Sepal.Width|Species,data=iris,grid="FALSE",
            boxplots="", reg.line="FALSE", pch=c(0,1,2))
scatterplot(Petal.Width~Sepal.Width|Species,data=iris,grid="FALSE", 
            boxplots="", reg.line="FALSE", pch=c(0,1,2))
```

ここに画像の説明を入力

を使用した並列散布図ggplot2

進んで使用する場合ggplot2は、比較的簡単に 2 プロット レイアウトを取得できます。

library(ggplot2)
library(gridExtra)
theme_set(theme_bw())

grid.arrange(
  ggplot(iris, aes(Sepal.Width, Sepal.Length, colour=Species)) +
    geom_point() +
    geom_smooth(alpha=0.2) +
    theme(legend.position="top"),
  ggplot(iris, aes(Sepal.Width, Petal.Width, colour=Species)) +
    geom_point() +
    geom_smooth(alpha=0.2) +
    theme(legend.position="top"),
  ncol=2)

ここに画像の説明を入力

出力ggplot2のように見えるようにプロットをカスタマイズするcars::scatterplot

他の方法で上記のコードをカスタマイズできます。信頼帯が必要ない場合は、 に追加se=FALSEgeom_smoothます。種ごとに異なる形状が必要な場合は、 に追加aes(shape=Species)geom_pointます。ベースグラフィックスで使用される特定の形状が必要な場合は+ scale_shape_manual(values=0:2)、 などを追加します。少し余分な作業を行うと、単一の凡例を取得することもできます。

以下のコードでは、元のベース グラフィック プロットに近いものを再現するために、これらのカスタマイズやその他のカスタマイズを追加しました。

# Components we'll reuse for both plots
my_theme = list(geom_point(aes(shape=Species)),
                geom_smooth(se=FALSE, show.legend=FALSE, lwd=0.8),
                scale_shape_manual(values=0:2),
                scale_colour_manual(values=c("black", "red","green")),
                theme_bw(),
                theme(panel.grid.major=element_blank(),
                      panel.grid.minor=element_blank(),
                      legend.position="top"))

p1 = ggplot(iris, aes(Sepal.Width, Sepal.Length, colour=Species)) +
  my_theme +
  labs(x="Sepal Width", y="Sepal Length") +
  scale_y_continuous(limits=c(3,8)) +
  scale_x_continuous(limits=c(1,5)) 

p2 = ggplot(iris, aes(Sepal.Width, Petal.Width, colour=Species)) +
  my_theme +
  labs(x="Sepal Width", y="Petal Width")

# Function to extract legend
# https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs
g_legend<-function(a.gplot){
  tmp <- ggplot_gtable(ggplot_build(a.gplot))
  leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
  legend <- tmp$grobs[[leg]]
  return(legend)}

leg = g_legend(p1)

grid.arrange(leg,
  arrangeGrob(grobs=lapply(list(p1,p2), function(p) p + guides(colour=FALSE, shape=FALSE)), ncol=2), 
  ncol=1, heights=c(1,10))

ここに画像の説明を入力

于 2016-11-23T20:19:56.123 に答える