34

私は ggplot を使用してファセット マップを描画していますが、xy アスペクト比を固定したまま、各ファセットで「自由な」スケールを許可する方法を見つけることができませんでした (小さな領域が小さすぎないように)。

簡単な例を次に示します。

require(maps)
require(ggplot2)

map_nz <- subset(fortify(map_data('nz')),
                 region %in% c("South.Island ", "North.Island "))
gg_nz <- qplot(long, lat, data=map_nz, geom="polygon", group=group)

私は今、ニュージーランドの北島と南島の区画を持っています。これをファセットして、次のように固定アスペクト比で表示できます。

gg_nz + coord_fixed() + facet_wrap(~region)

結果は次のようになります。

NZ マップ - 固定縦横比

北島ファセットにはかなりのスペースが無駄になっていることに注意してください。利用可能なスペースをもっと占有したいと思います。次のようにスケールを解放できます。

gg_nz + facet_wrap(~region, scales="free")

次の結果が得られます。

NZ マップ - フリー スケール

問題は、xy アスペクト比が各ファセットで 1:1 ではなくなったことです。各ファセットを異なる縮尺で表示できることをうれしく思いますが、ファセット内では縦横比を維持したいと考えています。

私は成功せずに次のことを試しました:

gg_nz + facet_wrap(~region, scales="free") + coord_fixed()

おそらくoverridesのscaleパラメーター。助言がありますか?facet_wrapcoord_fixed

更新: より劇的な例を示すために、米国の一部の州で同じ現象が発生しています。

固定座標 (coord_fixedまたはを使用coord_equal):

米国の地図 - 固定アスペクト フリー座標 ( を使用scales = free):

米国地図 - フリースケール

これらの地図はどちらも理想的ではありません。最初の地図では、デラウェア州は小さいです。2 つ目は、縦横比がかなり歪んでいます。たとえば、狭い州であるニュージャージー州は、あまりにも広く伸びています。

4

3 に答える 3

8

アップデート:

あなたが探しているのは、単一のファセットにトリミングまたはズームする機能だと思います。つまり、ファセットごとにylims とs を個別に調整します。xlimそのような機能がリクエストされているようですが、まだ実装されていないようです ( https://github.com/hadley/ggplot2/issues/187 )

以下のspace=freeオプションが機能しない場合、別の方法として、ファセットを破棄し、グリッド レイアウトやビューポートを使用して各プロットを手動で印刷します。


facet_grid代わりに使用facet_wrapして追加するspace=free

gg_state + facet_grid(~region, scales = "free_x", space="free")

ここに画像の説明を入力


元の回答:

たぶん、両方の軸を自由にスケーリングする代わりに、1 つのスケールのみを使用します。

map_state <- subset(fortify(map_data('state')),
                 region %in% c("california", "nevada"))
gg_state <- qplot(long, lat, data=map_state, geom="polygon", group=group)
gg_state + facet_wrap(~region, scales="free_x")

ここに画像の説明を入力

于 2013-04-28T01:35:09.773 に答える
1

coord_equal役に立ちますか?

 gg_nz + facet_wrap(~region, scales="free") + coord_equal()

編集

grid.arrange幅と高さを固定して、プロットをページに手動で配置するために使用できます。これでうまくいくようですが、機能的にはうまくいきませんfacet()。@mnelからのこの投稿に感謝します。

nz_sth <- qplot(long, lat, data=map_nz[map_nz$region == "South.Island ",], geom="polygon", group=group) + coord_fixed()
nz_nth <- qplot(long, lat, data= map_nz[ map_nz$region == "North.Island " , ] , geom="polygon", group=group) + coord_fixed()


grid.arrange( heights=unit(0.75, "npc") , widths=unit(0.5, "npc") , nz_sth,nz_nth, ncol=2)

ここに画像の説明を入力

于 2013-04-27T23:55:44.750 に答える