Rにおける関数とは、複数の処理手順を1つにまとめたオブジェクトのことを指します。 早速、例題をやってみましょう。
library(grid)
grid.imageFun <- function(nrow,ncol,cols,byrow=TRUE){
x <-(1:ncol)/ncol
y <-(1:nrow)/nrow
if(byrow){
right <- rep(x, nrow)
top <- rep(y, each=ncol)
}else{
right <- rep(x, each=nrow)
top <- rep(y, ncol)
}
grid.rect(x=right, y=top,
width=1/ncol, height=1/nrow,
just=c("right", "top"),
gp= gpar(col=NA, fill=cols),
name="image")
}
grays <- gray(0.4 + (rep(1:4, 4) -rep(0:3,each=4))/10)
grid.imageFun(4,4,grays)
grid.imageFun(4,4,grays,byrow=FALSE)
library(oz)
## Warning: package 'oz' was built under R version 3.3.2
grid.ozFun <- function(ozRegion){
pushViewport(
viewport(name="ozlay",
layout=grid.layout(1,1,
widths = diff(ozRegion$rangex),
heights=diff(ozRegion$rangey),
respect = TRUE)))
pushViewport(viewport(name="ozvp",
layout.pos.row=1,
layout.pos.col=1,
xscale=ozRegion$rangex,
yscale=ozRegion$rangey,
clip=TRUE))
index <- 1
for(i in ozRegion$lines){
grid.lines(i$x, i$y, default.units = "native",
name=paste("ozlines",index,sep=""))
index <- index + 1
}
upViewport(2)
}
grid.ozFun(ozRegion())
bivariate mapが作成できる関数を作ってみる。 第1引数:spatialPolygonDataFrame 第2引数:spatialPolygonDataFrameに含まれる列1 第3引数:spatialPolygonDataFrameに含まれる列2
## 簡単な作図関数を作ってみる
library(raster)
## Loading required package: sp
## Warning: package 'sp' was built under R version 3.3.2
library(rgdal)
## Warning: package 'rgdal' was built under R version 3.3.2
## rgdal: version: 1.2-7, (SVN revision 660)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 2.1.2, released 2016/10/24
## Path to GDAL shared files: /Users/matsuokeigo/Library/R/3.3/library/rgdal/gdal
## Loaded PROJ.4 runtime: Rel. 4.9.1, 04 March 2015, [PJ_VERSION: 491]
## Path to PROJ.4 shared files: /Users/matsuokeigo/Library/R/3.3/library/rgdal/proj
## Linking to sp version: 1.2-4
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 3.3.2
library(grid)
library(gridExtra)
library(plyr)
## map
Japan <- getData("GADM", country="Japan", level=1)
colnames(Japan@data)[12] <- c("region")
## 指定したwdからcsvを読み込み
setwd("~/Desktop")
data <- read.csv("稼働率2016.csv", header=T, fileEncoding="Shift_JIS",as.is = T)
Japan@data <- merge(Japan@data, data, by = "region")
bivariate_map <- function(Japan, Avg., Dev.){
require(dplyr)
Japan@data$classA <- ntile(Japan@data$Avg., 3)
Japan@data$classB <- ntile(Japan@data$Dev., 3)
Japan@data$classC <- ifelse(Japan@data$classA == 1 & Japan@data$classB == 1,"#e8e8e8",
ifelse(Japan@data$classA == 2 & Japan@data$classB == 1,"#b0d5df",
ifelse(Japan@data$classA == 3 & Japan@data$classB == 1,"#64acbe",
ifelse(Japan@data$classA == 1 & Japan@data$classB == 2,"#e4acac",
ifelse(Japan@data$classA == 2 & Japan@data$classB == 2,"#ad9ea5",
ifelse(Japan@data$classA == 3 & Japan@data$classB == 2,"#627f8c",
ifelse(Japan@data$classA == 1 & Japan@data$classB == 3,"#c85a5a",
ifelse(Japan@data$classA == 2 & Japan@data$classB == 3,"#985356",
ifelse(Japan@data$classA == 3 & Japan@data$classB == 3,"#574249",
"NA")))))))))
library(rgeos)
library(viridis)
library(ggthemes)
Japan_s <- gSimplify(Japan, .01)
# fortify でデータフレームの形へ
Japan@data$id <- rownames(Japan@data)
Japan1 <- fortify(Japan_s)
pJapan <- join(Japan1, Japan@data, by="id")
colnames(pJapan)
mainp <- ggplot(data=pJapan, aes(x=long, y=lat, group=group)) +
geom_polygon(data=pJapan, aes(x=long, y=lat, group=group,fill=classC)) +
scale_fill_manual(values = c("#574249","#985356","#c85a5a","#627f8c","#ad9ea5","#e4acac","#64acbe","#b0d5df","#e8e8e8"),guide="none") +
coord_quickmap() + ggthemes::theme_map() +
theme(legend.position=c(.8, .2))
xlab <- substitute(Avg.)
ylab <- substitute(Dev.)
library(reshape)
legendGoal=melt(matrix(1:9,nrow=3))
bvColors=c("#e8e8e8","#b0d5df","#64acbe","#e4acac","#ad9ea5","#627f8c","#c85a5a","#985356","#574249")
legendGoal$text <- as.data.frame(bvColors)
lgbox <- ggplot(legendGoal, aes(X2,X1,fill = as.factor(value),label = text)) +
geom_tile() +
scale_fill_manual(name="",values=bvColors) +
theme(legend.position="none") +
theme(axis.title.x=element_text(size=rel(1),color=bvColors[9])) + xlab(paste(xlab,"-->")) +
theme(axis.title.y=element_text(size=rel(1),color=bvColors[9])) + ylab(paste(ylab,"-->")) +
theme(axis.text=element_blank()) +
theme(line=element_blank()) +
theme(plot.subtitle = element_text(vjust = 1),
plot.caption = element_text(vjust = 1),
axis.ticks = element_line(linetype = "blank"),
axis.text = element_text(family = "serif",
colour = NA), panel.background = element_rect(fill = NA),
legend.key = element_rect(fill = NA),
legend.background = element_rect(fill = NA))
grid.newpage()
##main mapの描画
v1 <- viewport(width = 1, height = 1, x = 0.5, y = 0.5)
##navigate mapの描画
v2 <- viewport(width = 0.26, height = 0.22, x = 0.75, y = 0.22)
print(mainp, vp = v1)
print(lgbox, vp = v2)
}
## 完成した作図関数
## 第1引数にはSpatialPolygonDataFrame
## 第2引数にはx軸(SpatialPolygonDataFrameの列)
## 第3引数にはy軸(SpatialPolygonDataFrameの列)
bivariate_map(Japan,Dec.,Dev.)
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:plyr':
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
## The following object is masked from 'package:gridExtra':
##
## combine
## The following objects are masked from 'package:raster':
##
## intersect, select, union
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Warning: package 'rgeos' was built under R version 3.3.2
## rgeos version: 0.3-23, (SVN revision 546)
## GEOS runtime version: 3.4.2-CAPI-1.8.2 r3921
## Linking to sp version: 1.2-4
## Polygon checking: TRUE
## Warning: package 'ggthemes' was built under R version 3.3.2
##
## Attaching package: 'reshape'
## The following object is masked from 'package:dplyr':
##
## rename
## The following objects are masked from 'package:plyr':
##
## rename, round_any
## Don't know how to automatically pick scale for object of type data.frame. Defaulting to continuous.