/> 忍者ブログ

WEEKEND ECONOMIST

小さな工夫と発見の蓄積

ggplot2(3)色付き等高線

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

コメント

ただいまコメントを受けつけておりません。

ggplot2(3)色付き等高線

ggplot2で色付き等高線グラフを描くには、geom_point() で大きめのマーカーを並べる方法と、geom_tile()で長方形を並べる方法の2通りがある。公式のマニュアルではgeom_tile()が紹介されているが、geom_point()の方が多少動作が軽いし、結果が安定する気がする。
東急目黒線沿いの賃料マップ(codeIQ Magazine参照)を再現した。

上がgeom_point(), 下がgeom_tile()で書いたものだが、見た目をそう変わらない。左のほうが全体に滲むような色合いなのに対し、右はタイルを敷き詰めているので白い線が見える。


library(ggplot2)
library(reshape2)
x <- read.csv('http://blog.cnobi.jp/v1/blog/user/ca2e456143c0d20195537cc5daa5fd14/1399760770', 
              sep='\t', as.is=T)
z <- read.csv('http://blog.cnobi.jp/v1/blog/user/ca2e456143c0d20195537cc5daa5fd14/1399761108', 
              sep='\t', as.is=T, header=F)

fit <- loess(rent ~ lon + lat, data=x, span=0.5)
gd <- 100
lon <- seq(min(x$lon), max(x$lon), length=gd)
lat <- seq(min(x$lat), max(x$lat), length=gd)
D <- expand.grid(lon=lon, lat=lat)
v <- melt(predict(fit, D), value.name='rent')
v$lon <- as.numeric(gsub('lon=', '', v$lon))
v$lat <- as.numeric(gsub('lat=', '', v$lat))

p <- ggplot(v, aes(lon, lat, z=rent)) 
p + geom_point(aes(col=rent), linetype='blank', size=5, shape=15) +
    stat_contour(bins=10, col='white', size=1.2) + 
    stat_contour(bins=10) +
    geom_line(data=z, aes(V4, V3, z=V3), size=2, col='lightgreen') + 
    geom_line(data=z, aes(V4, V3, z=V3), size=1.2, color='coral4') + 
    geom_text(data=z, aes(V4, V3, z=V3, label=V1), 
              size=5.12, col='white', fontface=2) + 
    geom_text(data=z, aes(V4, V3, z=V3, label=V1), 
              fontface=2, size=5) + 
    scale_colour_gradientn(colours=rich.colors(10))

p + geom_tile(aes(fill=rent)) + 
    stat_contour(bins=10, col='white', size=1.2) + 
    stat_contour(bins=10) + 
    geom_line(data=z, aes(V4, V3, z=V3), size=2, col='lightgreen') + 
    geom_line(data=z, aes(V4, V3, z=V3), size=1.2, color='coral4') + 
    geom_text(data=z, aes(V4, V3, z=V3, label=V1), 
              size=5.12, col='white', fontface=2) +
    geom_text(data=z, aes(V4, V3, z=V3, label=V1), 
              fontface=2, size=5) + 
    scale_fill_gradientn(colours=rich.colors(10))
PR

コメント

プロフィール

HN:
KM
性別:
非公開

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30