geom_line

ggplot の geom_line を利用して折れ線グラフを描く例。

折れ線と信頼区間

折れ線グラフと共に信頼区間を描く場合は geom_smooth レイヤーを加える。

library(ggplot2)

# 乱数を利用してサンプルデータを作成します
x.axis <- c(1:100)
y.axis <- rnorm(100, 50, 10) * sort(runif(100, 1, 10))

# x座標とy座標をデータフレームにします
df <- data.frame(x = x.axis, y = y.axis)

head(df)
##   x        y
## 1 1 70.31683
## 2 2 60.74030
## 3 3 60.54899
## 4 4 87.61490
## 5 5 68.93591
## 6 6 91.98640

# ggplot の描画レイヤーを作成
g <- ggplot(
  df,                           # 作成したデータフレームを指定
  aes (
    x = x,                      # df の x 列を x 座標に指定
    y = y                       # df の y 列を y 座標に指定
  )
)
g <- g + geom_line(
  colour = "magenta",           # 線の色
  linetype = 2,                 # 線のタイプ
  size = 0.5                    # 線の太さ
)
g <- g + geom_smooth (          # 近似線
  method = "lm"                 # 回帰法により近似線を描く
)
g <- g + xlab("x axis")         # x座標
g <- g + ylab("y axis")         # y座標
g <- g + ggtitle("Sample")      # グラフタイトル

plot(g)
ggplot2で描く折れ線グラフ

複数の折れ線グラフ

複数の折れ線を描く例。サンプルデータは、ラットに 3 種類の餌(PF、C、G)を与えて 7 日間の体重を測ったものである。それぞれの実験群に 5 個体のラットを用いた。

library(reshape2)
library(ggplot2)

# データの読み込み
x <- read.table("https://stat.biopapyrus.net/data/rat.food.txt", header = TRUE)
x <- cbind(1:nrow(x), x)
colnames(x)[1] <- "id"

# データを ggplot2 用に整形
df <- melt(x, id.var = c("id", "type"))

# ggplot2 描画レイヤー
g <- ggplot(
  df,
  aes(
    x = variable,
    y = value,
    group = id,
    colour = type
  )
)
g <- g + geom_line()

# 描画
plot(g)
ggplot2で描く折れ線グラフ

折れ線グラフとエラーバー

複数の折れ線グラフをそれぞれグループ後に平均の折れ線グラフで描き、次にその標準偏差をエラーバーとして描く。サンプルデータは上に同じく、ラットに 3 種類の餌(PF、C、G)を与えて 7 日間の体重を測ったものである。それぞれの実験群に 5 個体のラットを用いた。ただし、各実験群の各測定日の体重の平均値を計算するのに、dplyr パッケージを利用している。

library(dplyr)
library(reshape2)
library(ggplot2)

# データの読み込み
x <- read.table("https://stat.biopapyrus.net/data/rat.food.txt", header = TRUE)
head(x)
##   type Day0 Day1 Day2 Day3 Day4 Day5 Day6 Day7
## 1   PF  200  203  195  192  187  185  184  178
## 2   PF  200  187  175  165  183  178  176  172
## 3   PF  208  197  209  199  198  190  186  185
## 4   PF  208  194  202  197  194  192  192  187
## 5   PF  212  200  210  199  188  192  188  185
## 6    C  192  211  223  232  243  248  258  266

# データを ggplot2 用に整形
y <- melt(x)
df <- y %>% group_by(type, variable) %>% summarize(mean = mean(value), sd = sd(value))
head(df)
## Source: local data frame [6 x 4]
## Groups: type
## 
##   type variable  mean       sd
## 1    C     Day0 205.8 7.823043
## 2    C     Day1 213.6 7.231874
## 3    C     Day2 225.8 6.099180
## 4    C     Day3 235.4 5.128353
## 5    C     Day4 247.0 4.847680
## 6    C     Day5 254.2 7.563068

# ggplot2 描画レイヤー
g <- ggplot(
  df,
  aes(
    x = variable,
    y = mean,
    group = type,
    colour = type
  )
)
g <- g + geom_line()
g <- g + geom_errorbar(
  aes(
    ymin = mean - sd,
    ymax = mean + sd,
    width = 0.3
  ))


# 描画
plot(g)
ggplot2で描く折れ線グラフ

座標軸の調整

ggplot の scale_x_continuousscale_y_continuous を利用することで、R の plot 関数に与える xlimylim の機能や grid 関数のような機能を実現できる。

時系列データを利用してグラフを作成する。

dat <- rbind(A = c(0, 1, 0, 2, 4, 5),
             B = c(1, 3, 5, 4, 2, 1),
             C = c(4, 3, 4, 2, 0, 1))
colnames(dat) <- c(0, 2, 4, 8, 12, 24)
dat
##   0 2 4 8 12 24
## A 0 1 0 2  4  5
## B 1 3 5 4  2  1
## C 4 3 4 2  0  1

df <- melt(dat)
colnames(df) <- c("type", "time", "value")
head(df)
##   type time value
## 1    A    0     0
## 2    B    0     1
## 3    C    0     4
## 4    A    2     1
## 5    B    2     3
## 6    C    2     3

g <- ggplot(df, aes(x = time, y = value, colour = type, group = type))
g <- g + geom_line()
g <- g + scale_x_continuous(breaks = c(0, 2, 4, 8, 12, 24), limits = c(0, 24))
plot(g)
ggplot2で描く折れ線グラフ