二つの乱数データのヒストグラムを作成する。
なお,複数の分布を同一画面に表示させるとヒストグラムは見づらいので, 箱ひげ図(boxplot)の利用を検討すること。


データ

set.seed(2) # 乱数シード(ソースコード実行時に毎回同じ乱数になる)

u <- rnorm(n = 100, mean = -2, sd = 1) # 平均0,標準偏差1の正規乱数(100個)
v <- rnorm(n = 100, mean =  2, sd = 2) # 平均2,標準偏差1の正規乱数(100個)
# カラーパレット
COL <- c(rgb(255,   0, 255,  55, max = 255), # ピンク
         rgb(  0,   0, 255,  55, max = 255)) # ラベンダー

RGB_Color


ヒストグラム

コンソール画面で?histとタイプするとヘルプを表示する
>?hist

基本のヒストグラム

hist(u)

分割数を設定したヒストグラム

Rは設定された分割数に近い見栄えの良い分割数で分割する。

hist(u, breaks = 2) # 分割数2だが複数のバーがでる。

x軸ラベルを設定したヒストグラム

hist(u, xaxt = 'n') # xaxtでx軸ラベルを非表示
# sideで軸を選択 x:1,y:2,atの位置にlabelsで指定したラベルを表示
axis(side = 1, 
     at     = seq(-5, 5, 0.5),
     labels = seq(-5, 5, 0.5))

複数のオプション設定を行ったヒストグラム

hist(u,
     breaks = 'Scott', # 'Sturges'(default),'Scott','FD'
     right = F,        # 以上~未満 [a, b), default T:超過~以下(a, b]
     ylim = c(0, 40),  # y軸の範囲(最小値,最大値)を設定
     col = 'yellow',   # バーの色を色名で指定
     main = '主タイトル',
     xlab = 'x軸ラベル[単位]',
     ylab = '度数')

複数のヒストグラムを描画

# 階級
BINS <- seq(-20, 20, 1)

# 図枠
hist(u, col = 0, border = 0,
     breaks = BINS, # 'Sturges'(default),'Scott','FD'
     right = F,     # 以上~未満 [a, b), default T:超過~以下(a, b]
     main = '主タイトル',
     xlab = 'x軸ラベル[単位]',
     ylab = '度数')

# 罫線
grid()

# プロット
hist(u, breaks = BINS, col = COL[1], add = T)
hist(v, breaks = BINS, col = COL[2], add = T)

# 凡例
legend('topleft', fill = COL, legend = c('u', 'v'))

有名なパッケージ(ggplot2)利用

library(ggplot2)
library(reshape2)

d <- data.frame(u, v)

ggplot(melt(d), aes(value, fill = variable)) + 
  geom_histogram(binwidth = 1, position = "dodge")

  #geom_histogram(binwidth = 1, position = "identity", alpha = 0.75)

インタラクティブグラフ

library(plotly)

plot_ly(type = 'histogram') |>
  
  add_histogram(x = u, name = 'u', marker = list(color = COL[1])) |>
  add_histogram(x = v, name = 'v', marker = list(color = COL[2])) |>
  
  layout(barmode = 'overlay', font = list(family = 'UD Digi Kyokasho NK-R'),  
         title = '主タイトル',
         xaxis = list(title = '項目ラベル'),
         yaxis = list(title = 'y軸ラベル[単位]'))

Python

データ

import numpy as np

np.random.seed(3)
u = np.random.normal(loc =-2.0, scale = 1.0, size = 100)
v = np.random.normal(loc = 2.0, scale = 2.0, size = 100)

作図

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

# 階級
BINS = np.linspace(-20, 20, 41)
plt.hist(u, BINS, label = 'u', color = (1.0, 0.0, 1.0, 0.2))
plt.hist(v, BINS, label = 'v', color = (0.0, 0.0, 1.0, 0.2))

# ラベル
plt.title('主タイトル')
plt.xlabel('x軸ラベル[単位]')
plt.ylabel('y軸ラベル[単位]')

# 格子線(grid lines)
plt.grid(linestyle = '--', axis = 'y', color = (0.8, 0.8, 0.8, 0.25))

# 凡例(はんれい)
plt.legend(loc = 'upper right')

# 作図
plt.show()