2011-10-22 11 views
6

geom_smooth多くのバリエーションが平均化されているため、大きな部分が大きい。しかし、このため、ズームアウト時にx軸上でどのように変化するのかを確認することは困難です。私はggplot2をズームインする必要がある約1000のグラフを、coord_cartesian経由で生成しています。ただし、各グラフには異なるズーム制限があります。私はggplot2スムーズにフィットするようにズームインすることができる方法はありますか?私はちょうどgeom_smoothラインとgeom_smoothラインプラスSE陰影付けされた領域の両方でズームインするためのソリューションに興味があります。ggplot2 - 自動的に(coord_cartesianを使用して)geom_smoothをズームインする。

例えば、私は、私はこれを回すことができる方法を知ることに興味を持って次のようになります。このような何かに

ggplot(data=mtcars, aes(y=qsec,x=wt)) + geom_point() + geom_smooth() 

ggplot(data=mtcars, aes(y=qsec,x=wt)) + geom_point() + geom_smooth() + coord_cartesian(ylim = c(15,20)) 

明示的に制限を指定せずに。

+1

現在のバージョン(0.89)では不可能です。次のバージョンでは、計算された範囲に描画が当てはまるので、 'ggplot(data = mtcars、aes(y = qsec、x = wt))+ geom_smooth()'を実行すると自動的にフィットします。 – kohske

+0

ありがとう、@kohske!あなたがあなたのコメントを回答として載せれば、私はそれを受け入れるでしょう(あなたには関係ないかもしれませんが、それは視聴者にとってより簡単になります)。私はそれを与えるように感じる場合、これは現在開発版で動作しますか? –

+0

新しいバージョンを楽しみにしています! –

答えて

7

スムージングモデルを手動でフィッティングすると、このタイプや他のタイプのカスタマイズをより柔軟に行うことができます。ほとんどのプロジェクトでは、まずインラインインターフェイスを使い始めますが、通常は別の調整が必要な場合は手動で計算に切り替える必要があります。

ハドレーの本の§9.1.1も参照してください。

require(ggplot2) 

# Fit smooth manually 
fit = loess(qsec ~ wt, data=mtcars) 
newx = data.frame(wt=with(mtcars, seq(min(wt), max(wt), len=100))) 
pred = predict(fit, newdata=newx, se=T) 
pred = cbind(wt=newx, qsec=pred$fit, se=pred$se.fit) 

# Calculate limits based on extent of smooth geom 
ylims = with(pred, c(floor(min(qsec-se)), ceiling(max(qsec+se)))) 

# Plot 
dev.new(width=5, height=4) 
ggplot(data=mtcars, aes(y=qsec, x=wt)) + 
    geom_point() + 
    geom_smooth(aes(ymax=qsec+se, ymin=qsec-se), data=pred, stat='identity') + 
    coord_cartesian(ylim = ylims) 

enter image description here

あなたが唯一の直接実際の限界、例えば、scales='free'を指定し、することはできませんので、しかし、これはまだの面では動作しません。

+0

クール、ありがとう!私は自分自身でファセットを結合してみなければならないかもしれません。私は次のバージョンでこれがどのように改善されるのか見てみたいと思うでしょう。 –

関連する問題