『データ可視化学入門』をRで書く 1.3 可視化で読み取れるロジック

1.3 可視化で読み取れるロジック

この記事はR言語 Advent Calendar 2023 シリーズ2の3日目の記事です。
qiita.com

1.3.2 変数間の関係

##### 1.3.2 #####
library(tidyverse)
library(patchwork)

set.seed(0)
# データ生成
df <- tibble(
  x1 = runif(50),
  y1 = runif(50),
  x2 = runif(50),
  y2 = 0.8 * (x2 - 0.5) + 0.5 + 0.1 * rnorm(50)
)

p1 <- df |>
  ggplot(aes(x=x1, y=y1)) +
  geom_point(color="blue") +
  geom_smooth(method=lm, color="blue") +
  labs(x = "変数X", y = "変数Y", title = "相関のない二つの変数") +
  coord_fixed()

p2 <- df |>
  ggplot(aes(x=x2, y=y2)) +
  geom_point(color="forestgreen") +
  geom_smooth(method=lm, color="forestgreen") +
  labs(x = "変数X", y = "変数Y", title = "相関のある二つの変数") +
  coord_fixed()

p1 + p2
1.3.2

1.3.4 性質の異なる分布の例

##### 1.3.4 #####
library(tidyverse)

# 平均0、標準偏差1の正規分布から10000個のサンプルを生成
set.seed(0)
mu <- 0
sigma <- 1
p1 <- data.frame(val = rnorm(10000, mean = mu, sd = sigma)) |>
  ggplot(aes(x=val)) + 
  geom_histogram(aes(y=after_stat(density)), bins=30, color = "black", fill = "gray") + 
  stat_function(fun = dnorm, args = list(mean=mu, sd=sigma), colour="red") +
  coord_cartesian(ylim = c(0, 0.45)) +
  labs(title = "正規分布", x = "", y = "相対度数") +
  theme(aspect.ratio = 3/5) #縦横比

# 標準コーシー分布から10000個のサンプルを生成
p2 <- data.frame(val = rcauchy(10000)) |>
  dplyr::filter(val > -10 & val < 10) |> # 外れ値を捨てる
  ggplot(aes(x=val)) +
  geom_histogram(aes(y=after_stat(density)), bins=50, color = "black", fill = "gray") +
  stat_function(fun = dcauchy, colour="blue") +
  coord_cartesian(ylim = c(0, 0.45)) +
  labs(title = "コーシー分布", x = "", y = "相対度数") +
  theme(aspect.ratio = 3/5) #縦横比

p1 + p2
1.3.4

1.3.5 初期の感染症の拡大

##### 1.3.5 #####
library(tidyverse)
library(patchwork)

# データフレームの生成
set.seed(0)
df <- tibble(
  x = seq(0, 30, 1),# 0から30までの範囲で等間隔に30個の数を生成
  y = exp(0.1 * x) * 100 * (1 + rnorm(31, 0, 0.08)) # 指数関数にランダムなノイズを付加する
  )

p1 <- df |>
  ggplot(aes(x = x, y = y)) +
  geom_point() +
  labs(x="経過日数", y="新規感染者数", title="リニアスケールでの表示") +
  theme(aspect.ratio = 1) #縦横比

p2 <- df |>
  ggplot(aes(x = x, y = y)) +
  geom_point() +
  scale_y_log10() +
  labs(x="経過日数", y="新規感染者数(対数軸)", title="片対数での表示") +
  theme(aspect.ratio = 1) #縦横比

p1 + p2
11.3.5

第1章3節は以上。