R  のグラフの見栄え調整(放射線測定マップの作成 Ⅳ)


「R を Ubuntu でインストールして csv からグラフを書く」
https://qiita.com/nanbuwks/items/f64de73537848a11649d

で測定値データから以下のようなグラフを作成しました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e560ad4d-0c05-9013-52c9-4a7e416743c6.png)

さて、このグラフはマップにフキダシで表示していきたいので、体裁をそれにあわせて修正していきます。

# 原点を 0 にする

0の下にも余白が現れないようにします。

```
> plot(data[[3]],data[[4]],xlab="Test",ylab="μSv/h",type="l",ylim=c(0,max(data[[4]])),yaxs="i")
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/fa6a9f91-db2e-95b6-77d7-f2139654447c.png)

# グラフのサイズをピクセルサイズで調整する

plot コマンドの前に png コマンドでスクリーンを作ります。

```
> png("plot1.png", width = 400, height = 200)
> plot(data[[3]],data[[4]],xlab="Test",ylab="μSv/h",type="l",ylim=c(0,max(data[[4]])),yaxs="i")
> dev.off()
```

![plot1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f5b6519c-9d1f-2b4f-1f12-9794c7024c8d.png)


うーん? どうもサイズがスクリーンピクセル値になっていませんね。unit="px" としても変わりませんでした。
96dpi でなんだか計算しているみたいです。

```
> dev.new(width = 480/96, height = 320/96, unit = "px")
> plot(data[[3]],data[[4]],xlab="Test",ylab="μSv/h",type="l",ylim=c(0,max(data[[4]])),yaxs="i")
```

としたらうまくいきました。サイズ指定中に演算を含めても大丈夫ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/f663f9e0-5edc-05ec-9338-e4ae69ee24af.png)

# ggplot でグラフを作る

横軸ラベルをいい感じにするには、 ggplot を使うのが良さそうなので plot から変更してみました。

``` 
> library(ggplot2)
> dev.new(width = 480/96, height = 320/96, unit = "px")
> ggplot(aes(x = data[[3]], y = data[[4]]), data = data) + geom_line()
```
としたら
```
警告メッセージ: 
1: Use of `data[[3]]` is discouraged. Use `.data[[3]]` instead. 
2: Use of `data[[4]]` is discouraged. Use `.data[[4]]` instead. 
```
が出たものの、以下のように表示されました。 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/a4f3b509-3a37-61ab-d443-a7c8b87d9271.png)

# ggplot で原点を調整

plot と同じように、原点を 0 に合わせてみました。軸ラベルをいい感じにし、グラフもスパイク形式にしてみました。

```
> ggplot(aes(x = data[[3]], y = data[[4]]), data = data) + geom_bar(stat="identity")  + scale_y_continuous(expand = c(0, 0), limits = c(0, max(data[[4]])*1.1)) + xlab("")+ylab("μSv/h")
```

とりあえずこの形式を使うことにします。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/fd491626-da1f-55ae-ecfa-2485e39a420f.png)


# png ファイルとして保存する

```
> png("plot1.png", width = 480, height = 320)
> ggplot(aes(x = data[[3]], y = data[[4]]), data = data) + geom_bar(stat="identity")  + scale_y_continuous(expand = c(0, 0), limits = c(0, max(data[[4]])*1.1)) + xlab("")+ylab("μSv/h")
> dev.off() 
```
とすると plot1.png が生成されました。この場合、実ピクセル数でサイズ指定ができるようです。

# スクリプト化する

以下の内容で makegraph.R ファイルを作ります。

```
library(ggplot2)
data <- read.csv("test3-100.csv")
data <- dplyr::mutate(data, 測定日時 = as.POSIXct(測定日時,tz="Asia/Tokyo"))
png("plot1.png", width = 480, height = 320)
ggplot(aes(x = data[[3]], y = data[[4]]), data = data) + geom_bar(stat="identity")  + scale_y_continuous(expand = c(0, 0), limits = c(0, max(data[[4]])*1.1)) + xlab("")+ylab("μSv/h")
dev.off() 

```
以下で実行すると、plot1.png が生成されます。
```
$ Rscript makegraph.R 
```

# 入力・出力ファイルを変数化する


makegraph.R を
```
library(ggplot2)
args <- commandArgs(trailingOnly = TRUE)
input_file <- args[1]
output_file <- args[2]
data <- read.csv(input_file)
data <- dplyr::mutate(data, 測定日時 = as.POSIXct(測定日時,tz="Asia/Tokyo"))
png(output_file, width = 480, height = 320)
ggplot(aes(x = data[[3]], y = data[[4]]), data = data) + geom_bar(stat="identity")  + scale_y_continuous(expand = c(0, 0), limits = c(0, max(data[[4]])*1.1)) + xlab("")+ylab("μSv/h")
dev.off() 
```

として、
```
$ Rscript makegraph.R test3-100.csv plot2.png
```
とすると plot2.png に出力されます。