web-dev-qa-db-ja.com

R(ベースグラフィックス)でプロットを回転させることは可能ですか?

これを検索したところ、{grid}を使用すると画像を回転させる方法があり、一部のプロットでは回転を試すことができます(たとえば、plot(y、x)の代わりにplot(x、y))。

ただし、Rでプロットを回転させる一般的な方法(ベースグラフィックスで生成されたすべてのプロットで機能する方法)があるかどうかを知りたいですか?

15
Tal Galili

ベースグラフィックス自体でこれを一般的に行う方法はないと私は合理的に確信しています。ただし、「プロット」にベースグラフィックとグリッドグラフィックを混在させることができるgridBaseパッケージがあります。パッケージのビネットには、グリッドviewportsにベースグラフィックを埋め込むセクションがあるため、プロットの周りにグリッドラッパーを作成し、グリッドを使用して回転できるかどうかを確認できます。これが実行可能なルートであるかどうかはわかりませんが、私が知る限り、あなたのQへの回答への唯一の潜在的なルートです。

gridBaseはCRANにあり、作成者はグリッドパッケージの作成者であるPaulMurrellです。

ビネットを閲覧した後、ページの「問題と制限」セクションの箇条書きの1つに注意します。これは、ベースグラフィックを回転gridに埋め込むことは不可能不可能であると述べていますビューポート。だから私はあなたが運が悪いと思います。

6
Gavin Simpson

グラフィックをエクスポートして読み戻し、回転させてrasterGrobとして表示することができます(または、マトリックスを回転させた後はrasterImage、またはgrImportグロブの場合はベクトルパスが必要)

plot(1:10, rnorm(10))
library(grid)
cap <- grid.cap()
grid.newpage()
grid.raster(cap, vp=viewport(angle=30))

新しいgridGraphicsパッケージがより良い代替手段になる可能性があります。

注:これはRstudioのグ​​ラフィックデバイスでは機能しないようです。おそらく、grid.capが実装されていません。

enter image description here

8
baptiste

これはgridGraphicsパッケージを介して可能ですが、エッジが少し荒い感じがします(?grid.echoの例はすべて私には機能しません)、

plot(1:10, rnorm(10))

library(gridGraphics)

grab_grob <- function(){
  grid.echo()
  grid.grab()
}

g <- grab_grob()
grid.newpage()
pushViewport(viewport(width=0.7,angle=30))
grid.draw(g)

enter image description here

6
baptiste

回転する3D散布図

Rglパッケージのplot3D(x、y、z)関数を使用して、インタラクティブな3D散布図を作成することもできます。マウスで回転できる回転する3D散布図を作成します。最初の3つの引数は、点を表すx、y、およびzの数値ベクトルです。 col =とsize =は、それぞれポイントの色とサイズを制御します。

# Spinning 3d Scatterplot
library(rgl)

plot3d(wt, disp, mpg, col="red", size=3)
4
phil

ベースグラフィックを使用して独自のプロット関数を作成できることを考えると、単一のソリューションがどのように存在するかはわかりません。 xデータをyデータで置き換える方法が本当に必要ですか? 「回転」とはどういう意味ですか?

2
Spacedman

機能 rotate_plotのように使用されます

rotate_plot(some_base_plot(x, y, ...))

ほとんどの基本プロットは値を返さないため、これは不可能です。

一部のプロットにはhoriz引数が含まれており、プロットを描画する方向を選択できます。を見てみましょう barplot.defaultこれを実装する方法を確認します。 (警告:面倒です。)

gridBaseを使用するという@ucfaglsの提案が最善の策です。 MurrellのRグラフィックスの 付録B での使用例がいくつかあります。

2
Richie Cotton