Rグラフチートシート

#棒グラフ

##シンプルな棒グラフ

```R
> score <- c(39, 78, 66, 20, 92)
> names(score) <- c("English", "Math", "Science", "History", "Geography" )
> barplot(score, xlab = "Subject", ylab = "Score" )
```

![スクリーンショット 2021-05-26 4.09.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/163f2902-9c1d-b9dd-d3fd-9f4425bbc4eb.png)

names()が使えるのは1次元のみ。

```R
> score2 <- matrix(c(73, 42, 85, 26, 53, 19, 49, 90, 29, 39), 2, 5)
> score2
     [,1] [,2] [,3] [,4] [,5]
[1,]   73   85   53   49   29
[2,]   42   26   19   90   39
> barplot(score2, names.arg = c("English", "Math", "Science", "History", "Geography"), xlab = "Subject", ylab = "Score")
```

![スクリーンショット 2021-05-26 4.39.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/aeb20c55-3336-42a2-7cea-57a8772884f5.png)

以下のように*barplot()*の引数に`beside = T`を付け加えると積み上げられない。

```R
> barplot(score2, names.arg = c("English", "Math", "Science", "History", "Geography"), xlab = "Subject", ylab = "Score", beside = T)
```

![スクリーンショット 2021-05-26 4.38.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/f4ceeeb4-5dd9-dae9-638d-d2bb6e233212.png)

##棒グラフの装飾

| オプション | 詳細 |
|:-:|:-:|
| names.arg  | 各要素の名前 |
| col  | 棒の色の指定  |
| main  | グラフのタイトル  |
| xlab  | x軸のラベル  |
| ylab  | y軸のラベル  |
| ylim  | y軸の範囲  |
| las  | 目盛のスタイル  |
| axis.lty  | x軸のスタイル  |
| font.main |  タイトルのフォント |
| font.lab  | 軸ラベルのフォント  |
| font  | 軸項目ののフォント  |
| cex.main  |  タイトルのフォントサイズ |
| cex.lab | 軸ラベルのフォントサイズ  |
| cex.names | x軸項目ののフォントサイズ  |
| cex.axis  | y軸目盛ののフォントサイズ  |
| width  | 棒の太さ  |
| space  | x軸のラベル  |
| legend | 凡例  |
| horiz | 垂直グラフか水平グラフの指定  |

`box()`で枠線をグラフにつけることが出来る。`box(lty =1)`というようにltyでスタイルを指定できる。

```R
barplot(score, col = c("red", "blue", "yellow", "green", "orange"), main = "Score Table", las = 1,
 xlab = "Subject", ylab = "Score", ylim = c(0, 100), cex.main = 3,cex.names = 0.8, axis.lty = 1)
> box(lty = 1) # グラフに枠線をつける
```

![スクリーンショット 2021-05-26 5.24.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/d85d7615-a817-070c-d318-b06378f50171.png)

```
> barplot(score2, names.arg = c("English", "Math", "Science", "History", "Geography"), col = c("red", "blue"), main = "Score Table", xlab = "Subject", ylab = "Score", ylim = c(0, 100), cex.main = 3,cex.names = 0.8, axis.lty = 1, beside = T, legend = c("yamada", "hanako"))
```

![スクリーンショット 2021-05-26 5.50.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/988752c7-7961-9ddb-e962-096822102622.png)

#円グラフ

##シンプルな円グラフ

Rによる円グラフは情報量が少ないため、おすすめしない。

```R
> apple <- c(58, 18, 7, 6, 11)
> pie(apple)
```

このままだとよく分からない円グラフができる。

![スクリーンショット 2021-05-26 6.21.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/97850e0e-f833-0f80-69d3-365e03ca0b50.png)

##円グラフの装飾

| オプション | 詳細 |
|:-:|:-:|
| radius | 円グラフの大きさ |
| labels | データの項目 |
| col | 色の指定 |
| clockwise | 時計回り(T)か反時計回り(F)の指定, c |
| border | 分割線の色 |
| main | タイトル ​|
| cex.main | タイトルのフォントサイズ ​|
| density | 射線を引く |

```R
> pie(apple, radius = 1, labels = c("Aomori", "Nagano", "Iwate", "Yamagata", "Other"), col = c("red", "blue", "yellow", "green", "orange"), clockwise = T,main = "Apple Produciton Ratio in Japan")
```

![スクリーンショット 2021-05-26 6.40.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/9d9e04e0-b725-756c-52ac-aa00460d8ee1.png)

##3D円グラフ

```R
> install.packages("plotrix")
> pie3D(apple, radius = 1, labels = c("Aomori", "Nagano", "Iwate", "Yamagata", "Other"), col = c("red", "blue", "yellow", "green", "orange"), main = "Apple Produciton Ratio in Japan")
```

![スクリーンショット 2021-05-26 6.53.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/b223817a-0694-bd59-83a4-dfb1a2610e66.png)


##もっと綺麗な円グラフ

もっと綺麗な円グラフを描くには自分で実装するしかない。


[参考] https://qiita.com/hachisukansw/items/3047e516ebdc55c74104

#折れ線グラフ
##シンプルな折れ線グラフ

以下のCSVデータは https://www.data.jma.go.jp/gmd/risk/obsdl/index.php からダウンロードして前処理したものを使用した。

```R
> temperature <- read.csv("temperature.csv")
> temperature
   Month Osaka Tokyo Okinawa Hokkaido
1      1   8.6   7.1    18.7     -2.3
2      2   8.0   8.3    18.7     -2.1
3      3  11.4  10.7    20.1      3.3
4      4  13.7  12.8    19.8      6.8
5      5  20.8  19.5    24.8     13.7
6      6  24.9  23.2    28.1     18.3
7      7  26.0  24.3    29.3     21.2
8      8  30.7  29.1    29.4     23.3
9      9  25.8  24.2    27.7     20.1
10    10  18.7  17.5    25.8     13.1
11    11  14.7  14.0    23.4      6.3
12    12   8.7   7.7    19.2     -1.6
> plot(temperature[,1], temperature[,2], type ="l")
```

![スクリーンショット 2021-05-26 11.18.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/c2f35840-84f1-e80c-a60a-c6967e9631c9.png)

`plot()`, `matplot()`のオプションの*type*で折れ線のスタイルを指定できる。
`matplot()`を使えば折れ線の数を増やせる。

```R
> matplot(temperature[,1], temperature[,2:5], type = "b")
```

![スクリーンショット 2021-05-26 18.17.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/2919fd3e-8cbf-1185-8a7d-be058f77e0c7.png)

##折れ線グラフの装飾

| オプション | 詳細 |
|:-:|:-:|
| type | 折れ線のスタイル |
| pch  | マーカーの形  |
| cex  | マーカーの大きさ  |
| lwd  | 線の太さ  |
| lty  | 線のスタイル  |
| col  | 折れ線の色の指定  |
| main  | グラフのタイトル  |
| xlab  | x軸のラベル  |
| ylab  | y軸のラベル  |
| xlim  | x軸の範囲  |
| ylim  | y軸の範囲  |
| las  | 目盛のスタイル  |
| axis.lty  | x軸のスタイル  |
| font.main |  タイトルのフォント |
| font.lab  | 軸ラベルのフォント  |
| cex.main  |  タイトルのフォントサイズ |
| cex.lab | 軸ラベルののフォントサイズ  |
| xaxp | x軸のメモリの間隔の指定 |

```R
> plot(temperature[,1], temperature[,2], type = "o", col = "blue", main = "Average Monthly Temperatures in Osaka", cex.main = 2, xlab = "Month", ylab = "Temperature", xlim = c(1,12), xaxp=c(1, 12, 11), las = "1")
```

![スクリーンショット 2021-05-26 18.40.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/efaeb1f5-3487-f608-4138-6792924f6d6d.png)

```R
> matplot(temperature[,1], temperature[,2:5], type = "o", pch = c(0, 1, 2, 5), lty = 1, col = c("blue", "red", "green", "orange"), main = "Average Monthly Temperatures in Japan", xlab = "Month", ylab = "Temperature", xlim = c(1,12), xaxp=c(1, 12, 11))
> legend("topleft", legend = c("Osaka", "Tokyo", "Okinawa", "Hokkaido"), col = c("blue", "red", "green", "orange"), pch = c(0, 1, 2, 5), lty = 1) # 凡例をつける
```

![スクリーンショット 2021-05-26 22.06.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/1ea3f70f-2cad-3c50-ca96-06422fe74505.png)


#箱ひげ図

##シンプルな箱ひげ図

```R
> x <- c(1, 5, 6,9, 14, 16, 19, 21, 27, 30, 34, 45, 46, 49, 52, 61)
> boxplot(x)
```

![スクリーンショット 2021-05-26 22.18.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/a77f959f-01ee-f404-2294-0ecb7e883288.png)

##箱ひげ図の装飾

| オプション | 詳細 |
|:-:|:-:|
| type | 折れ線のスタイル |
| names  | 各要素の名前  |
| col  | 箱ひげの色の指定  |
| main  | グラフのタイトル  |
| xlab  | x軸のラベル  |
| ylab  | y軸のラベル  |
| xlim  | x軸の範囲  |
| ylim  | y軸の範囲  |
| width  | 箱の幅  |
| staplewex  | ひげの幅  |
| cex.main  |  タイトルのフォントサイズ |
| cex.lab | 軸ラベルののフォントサイズ  |
| cex.axis | 軸目盛ののフォントサイズ  |
| horizontal | 箱ひげ図の水平表示 |
| border | 箱の枠線とひげの色  |
| las  | 目盛のスタイル  |
| notch | 箱に切り込みを入れるかの指定 |
| range | ひげと箱の距離  |

```R
> y <- c(2, 3, 4, 5, 11, 16, 17, 20, 22, 26, 33, 37, 39, 41, 50, 65)
> boxplot(x, y, xlab = "X VS Y", names = c("X", "Y"), ylab = "Strength", col = c("orange", "purple"), main = "Fight", cex.main = 3)
```

![スクリーンショット 2021-05-26 22.32.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/fd1fbe83-5fdd-7a43-0876-99db0a2dc176.png)

ちなみにsummary()を使うと中央値などを全て表示してくれる。

```R
> summary(x)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   1.00   12.75   24.00   27.19   45.25   61.00 
> summary(y)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   2.00    9.50   21.00   24.44   37.50   65.00 
```

#ヒストグラム

##シンプルなヒストグラム

```R
> iris[,2]
  [1] 3.5 3.0 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 3.7 3.4 3.0 3.0 4.0 4.4 3.9 3.5
 [19] 3.8 3.8 3.4 3.7 3.6 3.3 3.4 3.0 3.4 3.5 3.4 3.2 3.1 3.4 4.1 4.2 3.1 3.2
 [37] 3.5 3.6 3.0 3.4 3.5 2.3 3.2 3.5 3.8 3.0 3.8 3.2 3.7 3.3 3.2 3.2 3.1 2.3
 [55] 2.8 2.8 3.3 2.4 2.9 2.7 2.0 3.0 2.2 2.9 2.9 3.1 3.0 2.7 2.2 2.5 3.2 2.8
 [73] 2.5 2.8 2.9 3.0 2.8 3.0 2.9 2.6 2.4 2.4 2.7 2.7 3.0 3.4 3.1 2.3 3.0 2.5
 [91] 2.6 3.0 2.6 2.3 2.7 3.0 2.9 2.9 2.5 2.8 3.3 2.7 3.0 2.9 3.0 3.0 2.5 2.9
[109] 2.5 3.6 3.2 2.7 3.0 2.5 2.8 3.2 3.0 3.8 2.6 2.2 3.2 2.8 2.8 2.7 3.3 3.2
[127] 2.8 3.0 2.8 3.0 2.8 3.8 2.8 2.8 2.6 3.0 3.4 3.1 3.0 3.1 3.1 3.1 2.7 3.2
[145] 3.3 3.0 2.5 3.0 3.4 3.0
> hist(iris[,2])
```

![スクリーンショット 2021-05-26 22.50.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/db83eccc-b2bb-f08d-2d61-548e9725f764.png)


```R
> par(mfrow = c(2, 2))
> by(iris$Sepal.Length, iris$Species, hist) 
```

![スクリーンショット 2021-05-26 23.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/dee6aacd-8b74-c11f-2664-625eed44d535.png)

ちなみに`by()`は`tapply()`でも同じ結果になる。

##ヒストグラムの装飾

```R
> par(mfrow = c(2, 2))
> hist(iris[iris$Species=="setosa",]$Sepal.Length, col="red", main="setosa", xlim=range(iris$Sepal.Length), xlab="Sepal.Length")
> hist(iris[iris$Species=="versicolor",]$Sepal.Length, col="blue", main="versicolor", xlim=range(iris$Sepal.Length), xlab="Sepal.Length")
> hist(iris[iris$Species=="virginica",]$Sepal.Length, col="green", main="virginica", xlim=range(iris$Sepal.Length), xlab="Sepal.Length")
```

![スクリーンショット 2021-05-26 23.06.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/6836940e-e548-55d3-af3a-4582a380b911.png)


#散布図

##シンプルな散布図

```R
> plot(iris[,1], iris[,3])
```

![スクリーンショット 2021-05-27 0.53.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/de132ccf-da6e-fb02-4a04-484f1d0a57bf.png)


`text()`は散布図のラベルなどを加える関数で、`plot()`のオプション***type="n"***と組み合わせて使うと以下のように点にラベルをつけることが出来る。
なお、***type="n"***は点を書かないという意味。

```R
> plot(iris[,1], iris[,3],type ="n")
> text(iris[,1], iris[,3])
```

`rep()`という関数を用いるとラベルを新たに作ることが出来る。
以下の場合の`rep(50, 3)`は始めの50のラベルがS、51〜100がC、101〜150がVとなる。

![スクリーンショット 2021-05-27 0.53.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/74fbaf82-fa22-fa43-1c19-aa390f451563.png)

```R
> iris.label <- rep(c("S", "V", "C"), rep(50,3))
> plot(iris[,1], iris[,3],type ="n")
> text(iris[,1], iris[,3], iris.label)
```

![スクリーンショット 2021-05-27 6.29.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/67c63d40-bf36-6f10-0d3f-b40298357524.png)







##散布図の装飾

| オプション | 詳細 |
|:-:|:-:|
| type | グラフのスタイル |
| bg  | 点の色の指定  |
| main  | グラフのタイトル  |
| xlab  | x軸のラベル  |
| ylab  | y軸のラベル  |
| xlim  | x軸の範囲  |
| ylim  | y軸の範囲  |
| cex |  点のサイズ |
| cex.main  |  タイトルのフォントサイズ |
| pch  | 点のスタイル  |



```R
> plot(iris[,1],iris[,3],pch = 21,xlab = "Length of Sepal", ylab = "Length of Petal", cex=2,bg = c(2, 3, 4)[unclass(iris$Species)])
```

![スクリーンショット 2021-05-27 6.27.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/b359f23c-b97d-b2ed-0b32-25c24ad79f50.png)


#散布図行列

##シンプルな散布図行列

```R
> pairs(iris[1:4])
```

![スクリーンショット 2021-05-27 6.39.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/2931f6dc-ea3a-2412-f811-f4a04a37c2c1.png)


##散布図行列の装飾

| オプション | 詳細 |
|:-:|:-:|
| type | グラフのスタイル |
| bg  | 点の色の指定  |
| main  | グラフのタイトル  |
| cex |  点のサイズ |
| cex.main  |  タイトルのフォントサイズ |
| pch  | 点のスタイル  |



```R
> pairs(iris[1:4], pch = 21, bg = c("red", "green", "blue")[unclass(iris$Species)], main = "Iris Data", cex.main = 2)
```

![スクリーンショット 2021-05-27 6.46.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/d71a5ec3-c059-7c03-6e66-4983ab0deb9c.png)

#ggplot2

ggplot2というものを使えば、棒グラフ、ヒストグラム、散布図など多くのグラフを綺麗に描くことが出来る。また後日まとめた記事を書く予定です。