web-dev-qa-db-ja.com

ggplotのアスペクト比を修正する方法は?

文書に収まるようにプロットのサイズを変更しようとしていますが、プロットされたダイアグラムが正方形になるのが困難です。

例:

pdf(file = "./out.pdf", width = 5, height = 5)
p <- ggplot(mydata, aes(x = col1, y = col2))
print(p)
aux <- dev.off()

Xとyの制限は同じですが、結果のプロットは正方形ではありません。 Rは囲みパネルを5x5インチにするが、実際の図のサイズは気にしないと思います。

どうすればnsquashダイアグラムを作成できますか?

69
htorque

ggplotで、プロットのアスペクト比を保持するメカニズムは、coord_fixed()レイヤーをプロットに追加することです。これにより、実際の境界ボックスの形状に関係なく、プロット自体のアスペクト比が保持されます。

(結果のプロットをpdf(); print(p); dev.off()シーケンスではなく、pdf/png/etcに保存するためにggsaveを使用することもお勧めします。)

library(ggplot2)
df <- data.frame(
    x = runif(100, 0, 5),
    y = runif(100, 0, 5))

ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()

enter image description here

95
Andrie

特定のアスペクト比を確保するには、例えば正方形の場合は、theme(aspect.ratio=1)を使用します。

Andrieの答えは全体像を示しません。この例は、xの範囲がyの範囲に等しい不自然なデータを提供する可能性があるためです。ただし、データが次の場合:

df <- data.frame(
  x = runif(100, 0, 50),
  y = runif(100, 0, 5))
ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed()

プロットは次のようになります。

enter image description here

Coord_fixed()関数には、軸の比率を調整する引数もあります。

ratioアスペクト比、y/xとして表される

次のようにプロットを正方形にすることができます。

ggplot(df, aes(x=x, y=y)) + geom_point() + coord_fixed(ratio=10)

enter image description here

ただし、変数またはプロット領域の制限でこれを調整する必要があります(すべての制限がこれらの例のように整数でうまく割り切れるわけではありません)。

63
a different ben

完全を期すために、非常に異なる軸の制限を考慮したい場合:

df <- data.frame(
  x = runif(100, 0, 5000),
  y = runif(100, 0, 5))
ratio.display <- 4/3
ratio.values <- (max(df$x)-min(df$x))/(max(df$y)-min(df$y))
plot <- ggplot(df, aes(x=x, y=y)) + geom_point()
plot + coord_fixed(ratio.values / ratio.display)

その結果:

9
Graipher