R でデータからグラフ描画
自分用のメモで説明が少なめです。
ソフトウェア情報
- R-4.4.2 for Windows (83 megabytes, 64 bit)
- RStudio Version: 2024.09.1+394 | Released: 2024-11-04
- package
- dplyr .. 2.5.0
- ggplot2 .. 3.5.1
- survival .. 3.7-0
- survminer .. 0.5.0
- tidyverse .. 2.0.0
ソース
サマリ
-
ベクトル(1:重複なし):同ページ内リンク
# [5,7,3]
-
ベクトル(2:重複あり):同ページ内リンク
# [1, 3, 3, 2, 1, 3, ...]
-
ベクトル(3:カテゴリ分類操作あり):同ページ内リンク
# [3964, 3026, 4755, 6330, 8538, 5981, ...]
-
matrix:同ページ内リンク
# [,1] [,2] [,3] [,4] [,5] # [1,] 5 7 9 11 13 # [2,] 16 8 4 2 1
-
データフレーム(1:連続値x2):同ページ内リンク
# c1 c2 # 1 5 16 # 2 7 8 # 3 9 4 # 4 11 2 # 5 13 1
-
データフレーム(2:カテゴリ値と連続値):同ページ内リンク
# c1 c2 # 1 a 3 # 2 b 7 # 3 c 5
-
データフレーム(3:カテゴリ値と連続値/カテゴリの重複):同ページ内リンク
# c1 c2 # 1 a 1 # 2 a 1 # 3 a 2 # 4 a 3 # 5 b 5 # 6 c 8
-
データフレーム(4:連続値×3):同ページ内リンク
# c1 c2 c3 # 1 11 5 16 # 2 12 7 8 # 3 13 9 4 # 4 14 11 2 # 5 15 13 1
-
データフレーム(5:連続値×2とカテゴリ値):同ページ内リンク
# c1 c2 c3 # 1 11 5 a # 2 12 7 a # 3 13 9 a # 4 14 11 a # 5 15 13 a # 6 11 16 b # 7 12 8 b # 8 13 4 b # 9 14 2 b # 10 15 1 b
-
データフレーム(6:連続値とカテゴリ値×2):同ページ内リンク
# c1 c2 c3 # 1 1 a XX # 2 1 a XX # 3 2 a XX # 4 3 a YY # 5 5 b XX # 6 8 b XX
ベクトル(1:重複なし)
データ
vector | r1 | r2 | r3 |
---|---|---|---|
c1 | 5 | 7 | 3 |
(表示の都合で転置、横方向に)
# [5,7,3]
d = c(5,7,3)
データの中身を確認する操作
# ----------
head(d)
# [1] 5 7 3
# ----------
str(d)
# num [1:3] 5 7 3
# ----------
summary(d)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 3 4 5 5 6 7
# ----------
table(d,useNA="ifany")
# d
# 3 5 7
# 1 1 1
# ----------
addmargins(table(d,useNA="ifany"))
# d
# 3 5 7 Sum
# 1 1 1 3
# ----------
prop.table(table(d,useNA="ifany"))
# d
# 3 5 7
# 0.3333333 0.3333333 0.3333333
# ----------
addmargins(prop.table(table(d,useNA="ifany")))
# d
# 3 5 7 Sum
# 0.3333333 0.3333333 0.3333333 1.0000000
# ----------
length(d)
# [1] 3
# ----------
# 重複の無い、要素の数
library(dplyr)
n_distinct(d)
# [1] 3
# ----------
# 一意の値
unique(d)
# [1] 5 7 3
グラフ
Fig.1.1.ベクトル(値)の折れ線グラフ:変化を見る
# Fig.1.1.ベクトル(値)の折れ線グラフ:変化を見る
plot(d,type="b")
Fig.1.2.ベクトル(値)棒グラフ:頻度をみる
# Fig.1.2.ベクトル(値)棒グラフ:頻度をみる
barplot(d)
Fig.1.3.ベクトル(値)円グラフ:割合を見る
# Fig.1.3.ベクトル(値)円グラフ:割合を見る
pie(d, clockwise = T)
ベクトル(2:重複あり)
データ
vector | r1 | r2 | r3 | r4 | r5 | r6 | .. | 20 |
---|---|---|---|---|---|---|---|---|
c1 | 1 | 2 | 1 | 3 | 2 | 1 | .. | 1 |
(表示の都合で転置、横方向に)
# [1,2,1,3,2,1,1,1,1,1,1,2,1,3,1,1,1,1,1,1]
d = c(1,2,1,3,2,1,1,1,1,1,1,2,1,3,1,1,1,1,1,1)
df = data.frame(c1=d)
ほかのデータ例
# [2, 1, 3, 1, NA, 2, ..]
d = sample(c(1,2,3,NA), size=100, replace=T, prob=c(.34, .4, .23, .03))
df = data.frame(c1=d)
head(d)
# [a, c, b, a, b, b, ..]
d = sample(c("a","b","c"), size=100, replace=T, prob=c(.6, .3, .1))
df = data.frame(c1=d)
head(d)
データの中身を確認する操作
head(d)
# [1] 1 2 1 3 2 1
# ----------
str(d)
# num [1:20] 1 2 1 3 2 1 1 1 1 1 ...
# ----------
summary(d)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 1.00 1.00 1.00 1.35 1.25 3.00
# ----------
table(d,useNA="ifany")
# d
# 1 2 3
# 15 3 2
# ----------
addmargins(table(d,useNA="ifany"))
# d
# 1 2 3 Sum
# 15 3 2 20
# ----------
length(d)
# [1] 20
# ----------
library(dplyr)
n_distinct(d)
# [1] 3
# ----------
unique(d)
# [1] 1 2 3
グラフ
Fig.2.1
# Fig.2.1
plot(d)
Fig.2.2.頻度数(table)を描画
# Fig.2.2.頻度数(table)を描画
plot(table(d), type="b")
Fig.2.3.描画時にカウント
# Fig.2.3.描画時にカウント
library(ggplot2)
ggplot(df, aes(x=c1)) +
geom_line(stat="count") +
geom_point(stat="count",size=6)
Fig.2.4.ヒストグラム
# Fig.2.4.ヒストグラム
hist(d)
Fig.2.5.頻度数(table)を棒グラフで描画
# Fig.2.5.頻度数(table)を棒グラフで描画
barplot(table(d))
Fig.2.6.ヒストグラム
# Fig.2.6.ヒストグラム
library(ggplot2)
ggplot(df, aes(x=c1)) +
geom_histogram(binwidth = 0.5)
Fig.2.7.棒グラフで頻度を表現
# Fig.2.7.棒グラフで頻度を表現
library(ggplot2)
ggplot(df, aes(x=c1)) +
geom_bar(stat="count")
Fig.2.8.頻度数(table)を円グラフで描画
# Fig.2.8.頻度数(table)を円グラフで描画
pie(table(d),clockwise = "T")
ベクトル(3:カテゴリ分類操作あり)
データ
vector | r1 | r2 | r3 | r4 | r5 | r6 | rX |
---|---|---|---|---|---|---|---|
c1 | 2 | 1 | 1 | 2 | 1 | 3 | .. |
(表示の都合で転置、横方向に)
# 均一分布の乱数で 最小(min)、最大(max)範囲の整数を、個数(10)発生させ、floorで整数化
d = floor(runif(100, min=1000, max=9999))
# [1] 3964 3026 4755 6330 8538 5981
ほかのデータ例
# 正規分布の乱数
d = rnorm(100)
データ加工
# カテゴリ化(閾値による分類)
df <- data.frame(c1=d) |>
mutate(c2 = case_when(c1 <1000 ~ "-1000",
c1 >= 1000 & c1 < 2000 ~ "1k-2k",
c1 >= 2000 & c1 < 5000 ~ "2k-5k",
c1 >= 5000 & c1 < 8000 ~ "5k-8k",
c1 >= 8000 ~ "8k-")) |>
mutate(c2 = as.factor(c2))
# カテゴリ値によるグループ化と集計
# n .. そのカテゴリのレコード数(重複行あり)
# c1_ndist .. そのカテゴリにある一意なc1の数(重複値なし)
# c1_sum .. そのカテゴリにc1の和
# c1_mean .. そのカテゴリにc1の平均値
df2 <- df |>
group_by(c2) |>
summarise(n=n(),
c1_ndist=n_distinct(c1),
c1_sum=sum(c1),
c1_mean=mean(c1)) |>
ungroup()
データの中身を確認する操作
head(d)
# [1] 3265 7556 4210 2602 5082 9389
# ----------
str(d)
# num [1:20] 3265 7556 4210 2602 5082 ...
# ----------
summary(d)
# num [1:20] 3265 7556 4210 2602 5082 ...
# ----------
head(df)
# c1 c2
# 1 3265 2k-5k
# 2 7556 5k-8k
# 3 4210 2k-5k
# 4 2602 2k-5k
# 5 5082 5k-8k
# 6 9389 8k-
# ----------
summary(df)
# c1 c2
# Min. :1790 1k-2k: 1
# 1st Qu.:3091 2k-5k:10
# Median :4796 5k-8k: 5
# Mean :5187 8k- : 4
# 3rd Qu.:6994
# Max. :9668
# ----------
table(df$c2)
# 1k-2k 2k-5k 5k-8k 8k-
# 1 10 5 4
# ----------
df2
# # A tibble: 4 × 5
# c2 n c1_ndist c1_sum c1_mean
# <fct> <int> <int> <dbl> <dbl>
# 1 1k-2k 1 1 1790 1790
# 2 2k-5k 10 10 34516 3452.
# 3 5k-8k 5 5 31084 6217.
# 4 8k- 4 4 36347 9087.
グラフ
Fig.3.1.カテゴリごとの頻度(集計したデータを利用)
# Fig.3.1.カテゴリごとの頻度(集計したデータを利用)
plot(x=1:nrow(df2), y=df2$n)
Fig.3.2.カテゴリごとの頻度(未集計の生データを利用)
# Fig.3.2.カテゴリごとの頻度(未集計の生データを利用)
hist(d)
Fig.3.3.カテゴリごとの頻度(集計したデータを利用)
# Fig.3.3.カテゴリごとの頻度(集計したデータを利用)
library(ggplot2)
ggplot(df2) +
geom_point(mapping = aes(x = c2, y = c1_ndist))
つづきは
「データフレーム(2:カテゴリ値と連続値)」
で
matrix
データ
matrix | c1 | c2 | c3 | c4 | c5 |
---|---|---|---|---|---|
r1 | 5 | 7 | 9 | 11 | 13 |
r2 | 16 | 8 | 4 | 2 | 1 |
d=matrix(c(5,16,7,8,9,4,11,2,13,1),2,5)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 5 7 9 11 13
# [2,] 16 8 4 2 1
データの中身を確認する操作
addmargins(d)
# Sum
# 5 7 9 11 13 45
# 16 8 4 2 1 31
# Sum 21 15 13 13 14 76
# ----------
round(prop.table(d), 2)
# [,1] [,2] [,3] [,4] [,5]
# [1,] 0.07 0.09 0.12 0.14 0.17
# [2,] 0.21 0.11 0.05 0.03 0.01
# ----------
addmargins(round(prop.table(d), 2))
# Sum
# 0.07 0.09 0.12 0.14 0.17 0.59
# 0.21 0.11 0.05 0.03 0.01 0.41
# Sum 0.28 0.20 0.17 0.17 0.18 1.00
グラフ
Fig.4.1.棒グラフ:積み上げ(積層)
# Fig.4.1.棒グラフ:積み上げ(積層)
barplot(d)
Fig.4.2.棒グラフ:横に並べる
# Fig.4.2.棒グラフ:横に並べる
barplot(d,beside=T)
データフレーム(1:連続値x2)
データ
dataframe | c1 | c2 |
---|---|---|
r1 | 5 | 16 |
r2 | 7 | 8 |
r3 | 9 | 4 |
r4 | 11 | 2 |
r5 | 13 | 1 |
c1 = c( 5, 7, 9, 11, 13)
c2 = c(16, 8, 4, 2, 1)
d = data.frame(c1,c2)
# c1 c2
# 1 5 16
# 2 7 8
# 3 9 4
# 4 11 2
# 5 13 1
ほかのデータ例
# tibble型のデータフレームの例(1)
d = data_frame(c1,c2)
# # A tibble: 5 × 2
# c1 c2
# <dbl> <dbl>
# 1 5 16
# 2 7 8
# 3 9 4
# 4 11 2
# 5 13 1
# tibble型のデータフレームの例(2)
d = tibble(c1,c2)
データ加工
# index列を追加
d2 <- d |>
mutate(idx=1:nrow(d))
データの中身を確認する操作
head(d)
# c1 c2
# 1 5 16
# 2 7 8
# 3 9 4
# 4 11 2
# 5 13 1
# ----------
str(d)
# dataframeの場合
# 'data.frame': 5 obs. of 2 variables:
# $ c1: num 5 7 9 11 13
# $ c2: num 16 8 4 2 1
# 参考:tibbleの場合
# tibble [5 × 2] (S3: tbl_df/tbl/data.frame)
# $ c1: num [1:5] 5 7 9 11 13
# $ c2: num [1:5] 16 8 4 2 1
# ----------
summary(d)
# c1 c2
# Min. : 5 Min. : 1.0
# 1st Qu.: 7 1st Qu.: 2.0
# Median : 9 Median : 4.0
# Mean : 9 Mean : 6.2
# 3rd Qu.:11 3rd Qu.: 8.0
# Max. :13 Max. :16.0
グラフ
Fig.5.1.
# Fig.5.1.
plot(d)
Fig.5.2.
# Fig.5.2.
library(ggplot2)
ggplot(d) +
geom_point(aes(x = c1, y = c2), size=6)
Fig.5.3.Indexを追加したデータを使い2列のグラフを重ねる
# Fig.5.3.Indexを追加したデータを使い2列のグラフを重ねる
plot(x=d2$idx, y=d2$c1, type="b", ylim=c(0,20))
par(new=T)
plot(x=d2$idx, y=d2$c2, type="b", ylim=c(0,20), ann=F)
Fig.5.4.Indexを追加したデータを使い2列のグラフを重ねる(2)
# Fig.5.4.Indexを追加したデータを使い2列のグラフを重ねる(2)
library(ggplot2)
ggplot(d2) +
geom_line(mapping = aes(x = idx, y = c1)) +
geom_line(mapping = aes(x = idx, y = c2))
データフレーム(2:カテゴリ値と連続値)
データ
dataframe | c1 | c2 |
---|---|---|
r1 | a | 3 |
r2 | b | 7 |
r3 | c | 5 |
c1 = c("a","b","c")
c2 = c(3,7,5)
d = data.frame(c1=as.factor(c1),c2=c2)
# c1 | c2
# ---|----
# a | 3
# b | 7
# c | 5
データの中身を確認する操作
head(d)
# c1 c2
# 1 a 3
# 2 b 7
# 3 c 5
# --------
str(d)
# # d = data.frame(c1=as.factor(c1),c2=c2) のときのstr()
# 'data.frame': 3 obs. of 2 variables:
# $ c1: Factor w/ 3 levels "a","b","c": 1 2 3
# $ c2: num 3 7 5
# # 参考: d = data.frame(c1,c2) のときのstr()
# 'data.frame': 3 obs. of 2 variables:
# $ c1: chr "a" "b" "c"
# $ c2: num 3 7 5
# --------
summary(d)
# c1 c2
# a:1 Min. :3
# b:1 1st Qu.:4
# c:1 Median :5
# Mean :5
# 3rd Qu.:6
# Max. :7
# --------
table(d)
# c2
# c1 3 5 7
# a 1 0 0
# b 0 0 1
# c 0 1 0
グラフ
Fig.6.1.
# Fig.6.1.
plot(d)
Fig.6.2.
# Fig.6.2.
library(ggplot2)
ggplot(d) +
geom_point(mapping = aes(x = c1, y = c2))
Fig.6.3.散布図(Y軸のスケールを調整)
# Fig.6.3.散布図(Y軸のスケールを調整)
ggplot(d) +
geom_point(mapping = aes(x = c1, y = c2)) +
scale_y_continuous(breaks=seq(0,10),limits=c(0,10))
Fig.6.4.カテゴリごとの値を棒グラフで
# Fig.6.4.カテゴリごとの値を棒グラフで
ggplot(d, aes(x = c1, y = c2)) +
geom_bar(stat = "identity")
Fig.6.5.カテゴリごとの値を棒グラフで+装飾(カテゴリ値で色分け)
# Fig.6.5.カテゴリごとの値を棒グラフで+装飾(カテゴリ値で色分け)
ggplot(d, aes(x = c1, y = c2, fill=c1)) +
geom_bar(stat = "identity")
Fig.6.6.
# Fig.6.6.
pie(x=d$c2, label=d$c1, clockwise = T)
Fig.6.7.ラフな円グラフ
# Fig.6.7.ラフな円グラフ
ggplot(d, aes(x=0, y=c2, fill=c1)) +
geom_col(color="black", position=position_stack(reverse=T)) +
coord_polar("y")
Fig.6.8.円グラフ:時計回りの順に並べる
# Fig.6.8.円グラフ:時計回りの順に並べる
ggplot(d, aes(x=0, y=rev(c2), fill=c1)) +
geom_col(color="black") +
coord_polar("y") +
geom_text(aes(label=rev(c1)), position=position_stack(vjust=0.5)) +
theme_void() +
theme(legend.position = "none")
Fig.6.9.円グラフ:時計回りの順、ラベル名調整
# Fig.6.9.円グラフ:時計回りの順、ラベル名調整
d |>
mutate(vlbl = paste0(c1,"(",c2,")")) |>
mutate(ypos = cumsum(c2) - c2/2) |>
ggplot(aes(x=0, y=rev(c2), fill=c1)) +
geom_col(color="black") +
coord_polar("y") +
geom_text(aes(y=ypos, label=vlbl), size=4) +
theme_void() +
theme(legend.position="none")
Fig.6.10.円グラフ:時計回りの順、ラベル名調整、配色修正
# Fig.6.10.円グラフ:時計回りの順、ラベル名調整、配色修正
d |>
mutate(vlbl = paste0(c1,"(",c2,")")) |>
mutate(ypos = cumsum(c2) - c2/2) |>
ggplot(aes(x=0, y=c2, fill=c1)) +
geom_bar(stat="identity", color="black", position=position_stack(reverse=T)) +
geom_text(aes(y=ypos, label=vlbl), size=4) +
coord_polar("y") +
theme_void() +
theme(legend.position="none")
データフレーム(3:カテゴリ値と連続値/カテゴリの重複)
データ
dataframe | c1 | c2 |
---|---|---|
r1 | a | 1 |
r2 | a | 1 |
r3 | a | 2 |
r4 | a | 3 |
r5 | b | 5 |
r6 | c | 8 |
c1 = c("a","a","a","a","b","c")
c2 = c(1, 1, 2, 3, 5, 8)
d = data.frame(c1=as.factor(c1),c2)
# c1 c2
# 1 a 1
# 2 a 1
# 3 a 2
# 4 a 3
# 5 b 5
# 6 c 8
データ加工
# indexを追加
d0 <- d |>
mutate(c0 = 1:nrow(d))
# c1 c2 c0
# 1 a 1 1
# 2 a 1 2
# 3 a 2 3
# 4 a 3 4
# 5 b 5 5
# 6 c 8 6
データの中身を確認する操作
head(d)
# c1 c2
# 1 a 1
# 2 a 1
# 3 a 2
# 4 a 3
# 5 b 5
# 6 c 8
# --------
str(d)
# 'data.frame': 6 obs. of 2 variables:
# $ c1: Factor w/ 3 levels "a","b","c": 1 1 1 1 2 3
# $ c2: num 1 1 2 3 5 8
# --------
summary(d)
# c1 c2
# a:4 Min. :1.000
# b:1 1st Qu.:1.250
# c:1 Median :2.500
# Mean :3.333
# 3rd Qu.:4.500
# Max. :8.000
# --------
table(d)
# c2
# c1 1 2 3 5 8
# a 2 1 1 0 0
# b 0 0 0 1 0
# c 0 0 0 0 1
グラフ
Fig.7.1.カテゴリごとの分布
# Fig.7.1.カテゴリごとの分布
plot(d, type="b")
Fig.7.2.カテゴリごとの分布:散布図
# Fig.7.2.カテゴリごとの分布:散布図
library(ggplot2)
ggplot(d) +
geom_point(mapping = aes(x = c1, y = c2))
Fig.7.3.カテゴリごとの分布:箱ひげ図
# Fig.7.3.カテゴリごとの分布:箱ひげ図
ggplot(d) +
geom_boxplot(aes(x = c1, y = c2))
Fig.7.4.カテゴリごとの分布:バイオリンプロット
# Fig.7.4.カテゴリごとの分布:バイオリンプロット
ggplot(d) +
geom_violin(aes(x = c1, y = c2))
Fig.7.5.カテゴリごとの和
# Fig.7.5.カテゴリごとの和
ggplot(d, aes(x = c1, y = c2)) +
geom_bar(stat = "identity")
Fig.7.6.カテゴリごとの和:カテゴリで色分け
# Fig.7.6.カテゴリごとの和:カテゴリで色分け
ggplot(d, aes(x = c1, y = c2, fill=c1)) +
geom_bar(stat = "identity")
Fig.7.7.indexと値の散布図
# Fig.7.7.indexと値の散布図
plot(d0$c0, d0$c2)
Fig.7.8.indexと値の棒グラフ:カテゴリで色分け
# Fig.7.8.indexと値の棒グラフ:カテゴリで色分け
ggplot(d0, aes(x = c0, y = c2, fill=c1)) +
geom_bar(stat = "identity")
Fig.7.9.
# Fig.7.9.
pie(x=d$c2, label=d$c1, clockwise = T)
Fig.7.10.ラフな円グラフ
# Fig.7.10.ラフな円グラフ
ggplot(d, aes(x=0, y=c2, fill=c1)) +
geom_col(color="black", position=position_stack(reverse=T)) +
coord_polar("y")
Fig.7.11.カテゴリ別の円グラフ
# Fig.7.11.カテゴリ別の円グラフ
# .. 描画時にカテゴリでfillしているためか、最初にカテゴリでソート済みに(arrange)しておく
d |>
arrange(c1) |>
mutate(vlbl = paste0(c1,"(",c2,")")) |>
mutate(ypos = cumsum(c2) - c2/2) |>
ggplot(aes(x=0, y=c2, fill=c1)) +
geom_bar(stat="identity", color="black", position=position_stack(reverse=T)) +
geom_text(aes(y=ypos, label=vlbl), size=4) +
coord_polar("y") +
theme_void() +
theme(legend.position="none")
データフレーム(4:連続値×3)
データ
dataframe | c1 | c2 | c3 |
---|---|---|---|
r1 | 11 | 5 | 16 |
r2 | 12 | 7 | 8 |
r3 | 13 | 9 | 4 |
r4 | 14 | 11 | 2 |
r5 | 15 | 13 | 1 |
c1 = 11:15
c2 = c( 5, 7, 9, 11, 13)
c3 = c(16, 8, 4, 2, 1)
d = data.frame(c1,c2,c3)
# c1 c2 c3
# 1 11 5 16
# 2 12 7 8
# 3 13 9 4
# 4 14 11 2
# 5 15 13 1
データ加工
# indexを追加
library(dplyr)
d0 <- d |>
mutate(c0 = 1:nrow(d))
# c1 c2 c3 c0
# 1 11 5 16 1
# 2 12 7 8 2
# 3 13 9 4 3
# 4 14 11 2 4
# 5 15 13 1 5
データの中身を確認する操作
head(d)
# c1 c2 c3
# 1 11 5 16
# 2 12 7 8
# 3 13 9 4
# 4 14 11 2
# 5 15 13 1
# ----------
str(d)
# # d = data.frame(c1,c2,c3)
# data.frame': 5 obs. of 3 variables:
# $ c1: int 11 12 13 14 15
# $ c2: num 5 7 9 11 13
# $ c3: num 16 8 4 2 1
# 参考:tibbleの場合
# # d = data_frame(c1,c2,c3)
# tibble [5 × 3] (S3: tbl_df/tbl/data.frame)
# $ c1: int [1:5] 11 12 13 14 15
# $ c2: num [1:5] 5 7 9 11 13
# $ c3: num [1:5] 16 8 4 2 1
# ----------
summary(d)
# c1 c2 c3
# Min. :11 Min. : 5 Min. : 1.0
# 1st Qu.:12 1st Qu.: 7 1st Qu.: 2.0
# Median :13 Median : 9 Median : 4.0
# Mean :13 Mean : 9 Mean : 6.2
# 3rd Qu.:14 3rd Qu.:11 3rd Qu.: 8.0
# Max. :15 Max. :13 Max. :16.0
グラフ
Fig.8.1.
# Fig.8.1.
plot(d)
Fig.8.2.c1をX軸として、c2,c3の折れ線グラフ
# Fig.8.2.c1をX軸として、c2,c3の折れ線グラフ
plot(x=d$c1, y=d$c2, type="b", col=1, ylim=c(0,20), xlab="c1", ylab="c2,c3")
par(new=T)
plot(x=d$c1, y=d$c3, type="b", col=2, ylim=c(0,20), ann=F)
legend("topleft", legend=c("c1", "c2"), lty=1, col=1:2)
Fig.8.3.
# Fig.8.3.
library(ggplot2)
ggplot(d) +
geom_point(mapping = aes(x = c1, y = c2), size=4) +
geom_line(mapping = aes(x = c1, y = c2)) +
geom_point(mapping = aes(x = c1, y = c3), color="red", size=4) +
geom_line(mapping = aes(x = c1, y = c3), color="red")
Fig.8.4.c1をX軸として、c2,c3の棒グラフ
# Fig.8.4.c1をX軸として、c2,c3の棒グラフ
# .. ずらして描画できない?ので半透明で重ねる
ggplot(d) +
geom_bar(mapping = aes(x = c1, y = c2), stat="identity", width=0.8, color="red", alpha=1/3) +
geom_bar(mapping = aes(x = c1, y = c3), stat="identity", width=0.5, color="blue", alpha=1/3)
Fig.8.5.c1をX軸として、c2の棒グラフとc3の折れ線グラフ
# Fig.8.5.c1をX軸として、c2の棒グラフとc3の折れ線グラフ
ggplot(d) +
geom_bar(aes(x = c1, y = c2), stat="identity") +
geom_point(aes(x = c1, y = c3), stat="identity", color="blue") +
geom_line(aes(x = c1, y = c3), stat="identity", color="blue")
データフレーム(5:連続値×2とカテゴリ値)
データ
dataframe | c1 | c2 | c3 |
---|---|---|---|
r1 | 11 | 5 | a |
r2 | 12 | 7 | a |
r3 | 13 | 9 | a |
r4 | 14 | 11 | a |
r5 | 15 | 13 | a |
r6 | 11 | 16 | b |
r7 | 12 | 8 | b |
r8 | 13 | 4 | b |
r9 | 14 | 2 | b |
r10 | 15 | 1 | b |
c1a = 11:15
c2a = c( 5, 7, 9, 11, 13)
c3a = rep("a", length(c1a))
c2b = c(16, 8, 4, 2, 1)
c3b = rep("b", length(c1a))
c1 = c(c1a,c1a)
c2 = c(c2a,c2b)
c3 = c(c3a,c3b)
d = data.frame(c1,c2,c3=as.factor(c3))
# c1 c2 c3
# 1 11 5 a
# 2 12 7 a
# 3 13 9 a
# 4 14 11 a
# 5 15 13 a
# 6 11 16 b
# 7 12 8 b
# 8 13 4 b
# 9 14 2 b
# 10 15 1 b
ほかのデータ例
# Rに標準に格納
iris
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 5.4 3.9 1.7 0.4 setosa
データ加工
# indexを追加
library(dplyr)
d0 <- d |>
mutate(c0 = 1:nrow(d))
# c1 c2 c3 c0
# 1 11 5 a 1
# 2 12 7 a 2
# 3 13 9 a 3
# 4 14 11 a 4
# 5 15 13 a 5
# 6 11 16 b 6
# 7 12 8 b 7
# 8 13 4 b 8
# 9 14 2 b 9
# 10 15 1 b 10
データの中身を確認する操作
head(d)
# c1 c2 c3
# 1 11 5 a
# 2 12 7 a
# 3 13 9 a
# 4 14 11 a
# 5 15 13 a
# 6 11 16 b
# ----------
str(d)
# 'data.frame': 10 obs. of 3 variables:
# $ c1: int 11 12 13 14 15 11 12 13 14 15
# $ c2: num 5 7 9 11 13 16 8 4 2 1
# $ c3: Factor w/ 2 levels "a","b": 1 1 1 1 1 2 2 2 2 2
# ----------
summary(d)
# c1 c2 c3
# Min. :11 Min. : 1.00 a:5
# 1st Qu.:12 1st Qu.: 4.25 b:5
# Median :13 Median : 7.50
# Mean :13 Mean : 7.60
# 3rd Qu.:14 3rd Qu.:10.50
# Max. :15 Max. :16.00
グラフ
Fig.9.1.相関プロット群
# Fig.9.1.相関プロット群
plot(d)
Fig.9.2.カテゴリ値(c3)と連続値(c2)の分布
# Fig.9.2.カテゴリ値(c3)と連続値(c2)の分布
plot(d$c3, d$c2)
Fig.9.3.カテゴリ値(c3)と連続値(c2)の分布:箱ひげ図
# Fig.9.3.カテゴリ値(c3)と連続値(c2)の分布:箱ひげ図
library(ggplot2)
ggplot(d) +
geom_boxplot(aes(x = c3, y = c2))
Fig.9.4.カテゴリ値(c3)と連続値(c2)の分布:バイオリンプロット
# Fig.9.4.カテゴリ値(c3)と連続値(c2)の分布:バイオリンプロット
ggplot(d) +
geom_violin(aes(x = c3, y = c2))
Fig.9.5.カテゴリ値(iris.Speces)と連続値(iris.Sepal.Length)の分布:バイオリンプロット+箱ひげ図
# Fig.9.5.カテゴリ値(iris.Speces)と連続値(iris.Sepal.Length)の分布:バイオリンプロット+箱ひげ図
ggplot(iris, aes(x = Species, y = Sepal.Length, fill=Species)) +
geom_violin() +
geom_boxplot(width=.2, fill="white")+
theme_classic()
Fig.9.6.連続値(c1)と連続値(c2)の折れ線グラフ:カテゴリ別
# Fig.9.6.連続値(c1)と連続値(c2)の折れ線グラフ:カテゴリ別
library(ggplot2)
ggplot(d) +
geom_line(mapping = aes(x = c1, y = c2, col=c3))
Fig.9.7.連続値(c1)と連続値(c2)の棒グラフ:カテゴリの和
# Fig.9.7.連続値(c1)と連続値(c2)の棒グラフ:カテゴリの和
ggplot(d, aes(x = c1, y = c2)) +
geom_bar(stat="identity")
Fig.9.8.連続値(c1)と連続値(c2)の棒グラフ:カテゴリ別積層
# Fig.9.8.連続値(c1)と連続値(c2)の棒グラフ:カテゴリ別積層
ggplot(d, aes(x = c1, y = c2, fill=c3)) +
geom_bar(stat="identity")
Fig.9.9.連続値(c1)と連続値(c2)の棒グラフ:カテゴリ別横並び
# Fig.9.9.連続値(c1)と連続値(c2)の棒グラフ:カテゴリ別横並び
ggplot(d, aes(x = c1, y = c2, fill=c3)) +
geom_bar(stat="identity", position=position_dodge())
Fig.9.10.連続値(iris.Sepal.Width)と連続値(iris.Sepal.Length)の散布図:カテゴリ別
# Fig.9.10.連続値(iris.Sepal.Width)と連続値(iris.Sepal.Length)の散布図:カテゴリ別
ggplot(iris) +
geom_point(mapping = aes(x = Sepal.Width, y = Sepal.Length, color=Species))
データフレーム(6:連続値とカテゴリ値×2)
データ
dataframe | c1 | c2 | c3 |
---|---|---|---|
r1 | 1 | a | XX |
r2 | 1 | a | XX |
r3 | 2 | a | XX |
r4 | 3 | a | YY |
r5 | 5 | b | XX |
r6 | 8 | b | YY |
c1 = c(1, 1, 2, 3, 5, 8,13,21,35,56,91,147)
c2 = c("a","a","a","a","b","b","b","b","c","c","c","c")
c3 = c("XX", "XX", "XX", "YY", "XX", "XX","XX", "XX", "XX", "YY", "XX", "YY")
d = data.frame(c1,c2=as.factor(c2),c3=as.factor(c3))
# c1 c2 c3
# 1 1 a XX
# 2 1 a XX
# 3 2 a XX
# 4 3 a YY
# 5 5 b XX
# 6 8 b XX
# 7 13 b XX
# 8 21 b XX
# 9 35 c XX
# 10 56 c YY
# 11 91 c XX
# 12 147 c YY
データ加工
# カテゴリ列(c2,c3)でグループ化して集計
library(dplyr)
d2 <- d |>
group_by(c2,c3) |>
summarise(vn=n(),
vsum=sum(c1)) |>
ungroup()
# # A tibble: 5 × 4
# c2 c3 vn vsum
# <fct> <fct> <int> <dbl>
# 1 a XX 3 4
# 2 a YY 1 3
# 3 b XX 4 47
# 4 c XX 2 126
# 5 c YY 2 203
データの中身を確認する操作
head(d)
# c1 c2 c3
# 1 1 a XX
# 2 1 a XX
# 3 2 a XX
# 4 3 a YY
# 5 5 b XX
# 6 8 b XX
# ----------
str(d)
# 'data.frame': 12 obs. of 3 variables:
# $ c1: num 1 1 2 3 5 8 13 21 35 56 ...
# $ c2: Factor w/ 3 levels "a","b","c": 1 1 1 1 2 2 2 2 3 3 ...
# $ c3: Factor w/ 2 levels "XX","YY": 1 1 1 2 1 1 1 1 1 2 ...
# ----------
summary(d)
# c1 c2 c3
# Min. : 1.00 a:4 XX:9
# 1st Qu.: 2.75 b:4 YY:3
# Median : 10.50 c:4
# Mean : 31.92
# 3rd Qu.: 40.25
# Max. :147.00
# ----------
table(d)
# , , c3 = XX
#
# c2
# c1 a b c
# 1 2 0 0
# 2 1 0 0
# 3 0 0 0
# 5 0 1 0
# 8 0 1 0
# 13 0 1 0
# 21 0 1 0
# 35 0 0 1
# 56 0 0 0
# 91 0 0 1
# 147 0 0 0
#
# , , c3 = YY
#
# c2
# c1 a b c
# 1 0 0 0
# 2 0 0 0
# 3 1 0 0
# 5 0 0 0
# 8 0 0 0
# 13 0 0 0
# 21 0 0 0
# 35 0 0 0
# 56 0 0 1
# 91 0 0 0
# 147 0 0 1
グラフ
Fig.10.1.連続値(c1)の棒グラフ
# Fig.10.1.連続値(c1)の棒グラフ
barplot(d$c1)
Fig.10.2.カテゴリ値(c2)と連続値(c1)の分布
# Fig.10.2.カテゴリ値(c2)と連続値(c1)の分布
library(ggplot2)
ggplot(d, aes(x = c2, y = c1)) +
geom_bar(stat="identity")
Fig.10.3.カテゴリ値(c2)と連続値(c1)の分布:カテゴリ値(c3)で積層
# Fig.10.3.カテゴリ値(c2)と連続値(c1)の分布:カテゴリ値(c3)で積層
ggplot(d, aes(x = c2, y = c1, fill=c3)) +
geom_bar(stat="identity")
Fig.10.4.カテゴリ値(c2)と連続値(c1)の分布:カテゴリ値(c3)で横並び
# Fig.10.4.カテゴリ値(c2)と連続値(c1)の分布:カテゴリ値(c3)で横並び
# - カテゴリ(c3)別に横に並べる場合は別途group_by で集計したデータで描画が必要
ggplot(d2, aes(x = c2, y = sumc1, fill=c3)) +
geom_bar(stat="identity", position = position_dodge())
Fig.10.5.カテゴリ値(c2)と連続値(c1)の散布図
# Fig.10.5.カテゴリ値(c2)と連続値(c1)の散布図
ggplot(d) +
geom_point(aes(x = c2, y = c1))
Fig.10.6.カテゴリ値(c2)と連続値(c1)の散布図+カテゴリ値(c3)でマーカ・色変更
# Fig.10.6.カテゴリ値(c2)と連続値(c1)の散布図+カテゴリ値(c3)でマーカ・色変更
ggplot(d) +
geom_point(aes(x = c2, y = c1, color=c3, pch=c3, size=2))
Fig.10.7.カテゴリ値(c2)と連続値(c1)の箱ひげ図
# Fig.10.7.カテゴリ値(c2)と連続値(c1)の箱ひげ図
# boxplot(d$c2, d$c1) # こちらだとX軸が変。NA未対応?
plot(d$c2, d$c1)
Fig.10.8.
# Fig.10.8.
ggplot(d) +
geom_boxplot(aes(x = c2, y = c1))
Fig.10.9.カテゴリ値(c2)と連続値(c1)の箱ひげ図+カテゴリ値(c3)で色分け
# Fig.10.9.カテゴリ値(c2)と連続値(c1)の箱ひげ図+カテゴリ値(c3)で色分け
ggplot(d) +
geom_boxplot(aes(x = c2, y = c1, color=c3))
Fig.10.10.カテゴリ値(c2,c3)の組み合わせに対する連続値(c1)の和:散布図
# Fig.10.10.カテゴリ値(c2,c3)の組み合わせに対する連続値(c1)の和:散布図
# - 内部でc1の和と取っている。size=c1だと大きすぎる。調整のためlogをとる
ggplot(d) +
geom_point(aes(x = c2, y = c3), size=log(c1)*3)
(EOF)
Discussion