2016-10-18 127 views
0

私はx軸が実数でy軸が私のデータの虚数値であるggplotのプロットを持っています。たとえば:ggplotに網掛け部分をプロットする方法は?

dat=data.frame(real=c(0,0.5,0.7),imaginary=c(0.7,0.5,0.5)) 
ggplot(dat,aes(real,imaginary))+geom_point(size=7)+xlim(0,1)+ylim(0,1) 

ので、プロットは次のようになります。今、私は次のような機能を含むプロット上の斜線を追加する必要が

enter image description here

レンジ:

real = a*cos(b)   # 0<a<0.5 0<b<45 
imaginary = a*sin(b) # 0<a<0.5 0<b<30 

を感謝たくさん

+0

あなたは「範囲を、次のような機能を含む、プロット上の斜線を追加する」とはどういう意味ですか?リストされた2つの線をプロットし、x軸と線の間の領域を陰にしたいとしますか?例えばa = 0.5についてはa * sin(b)をプロットし、a = 0(x軸)とa = 0.5の間に陰をつけますか?しかし、 'real = a * cos(b)'はどうでしょうか?あなたのx軸は本当ですか?明確にできますか? –

+1

ああ、実際の座標と虚数座標(つまりxとy)で定義された領域をトレースしたいのですか?それを埋める? –

+0

@ mathematical.coffeeはい正確に。混乱させて申し訳ありません。 – Mohammad

答えて

3

これは数学の問題のほうが多いようですプログラミングよりも。どのシェイプがトレースされるかを最初に判断します(シェーディングが可能な領域が座標で定義されている場合もありますが、この場合はシェイプできます)。それらを描画するにはgeom_polygon

半径0.5で(0、0)を中心とする円を描き、それを記入したいと思うように見えます(あなたの方程式はこの円を記述するreal^2 + imaginary^2 = a^2です)。aが0から0.5になるということは、どのくらいの円をトレースするかを定義しますが、2 * piを打つと、あなたは完全な円になりますので、それを越えても違いはありません)。

この円の(x、y)座標を設定するだけです。

b <- seq(0, 2*pi, by=0.1) # sin/cos are periodic, no point going past 2*pi 
circ <- data.frame(x=0.5*cos(b), y=0.5*sin(b)) 

オリジナルプロット:

dat=data.frame(x=c(0,0.5,0.7),y=c(0.7,0.5,0.5)) 
p = ggplot(dat,aes(x,y))+geom_point(size=7)+xlim(0,1)+ylim(0,1)+xlab("real")+ylab("imaginary") 

ので、あなたが必要とするすべてはあなたがそうで色などを変更することができます

p + geom_polygon(dat=circ) 

enter image description here

です。今度は、このグラフでサークルが奇妙に見えることに気づくでしょう。サークルがこれ以上の範囲をカバーしている間、xとyの制限は0から1に制限されているからです。 xlimylimを使用した場合、ggplotはビューウィンドウを単純に切り捨てるのではなく、データを切り捨てる(つまり、ポリゴンが奇妙に見えるように切り捨てる)。これを修正するには、xlimylimではなく、coord_cartesianを使用して軸を制限してください。

ggplot(dat, aes(x, y)) + geom_point(size=7) + 
    coord_cartesian(xlim=c(0, 1), ylim=c(0, 1)) + 
    geom_polygon(dat=circ) 

enter image description here

関連する問題