1 データ

options(digits = 2) # 有効数字2桁表示

set.seed(2) # 乱数シード

d0 <- data.frame(
    u = rnorm(n = 100, mean =  0, sd = 1),
    v = rnorm(n = 100, mean =  2, sd = 2),
    w = rnorm(n = 100, mean = -2, sd = 3)) 

d <- round(d0, 2) # 小数点第2位に丸め

str(d)     # オブジェクト構造表示
## 'data.frame':    100 obs. of  3 variables:
##  $ u: num  -0.9 0.18 1.59 -1.13 -0.08 0.13 0.71 -0.24 1.98 -0.14 ...
##  $ v: num  4.15 2.52 1.37 0.5 0.28 6.1 3.88 6.02 1.16 1.3 ...
##  $ w: num  -1.11 -5.06 6.61 -1.34 -4.9 -0.85 -2.37 -3.05 -0.2 -1.31 ...
summary(d) # 要約統計量
##        u               v              w        
##  Min.   :-2.45   Min.   :-2.2   Min.   :-10.2  
##  1st Qu.:-0.86   1st Qu.: 0.4   1st Qu.: -3.4  
##  Median :-0.14   Median : 2.2   Median : -1.8  
##  Mean   :-0.03   Mean   : 2.1   Mean   : -1.6  
##  3rd Qu.: 0.81   3rd Qu.: 3.5   3rd Qu.:  0.2  
##  Max.   : 2.09   Max.   : 6.2   Max.   :  6.7
library(DT)
## Warning: パッケージ 'DT' はバージョン 4.3.3 の R の下で造られました
datatable(d, caption = '正規乱数データ', editable = 'cell', rownames = F)
# カラーパレット
COL <- c(rgb(255,   0,   0,  105, max = 255), # 赤
         rgb(  0,   0, 255,  105, max = 255), # 青
         rgb(  0, 155,   0,  105, max = 255)) # 緑

RGB_Color


2 箱ひげ図

boxplot(d)

オプションを設定して見栄えを良くする。

# プロット
boxplot(d, col = COL,
        ylim = c(-12, 12),
        names = c('U', 'V', 'W'),
        main = '主タイトル',
        xlab = '項目ラベル',
        ylab = 'y軸ラベル[単位]')

# 罫線
abline(h = seq(-50, 50, 5), lty = 2, col = gray(.5, .25))

library(plotly)
library(tidyverse)
ds <- pivot_longer(d, cols = c('u', 'v', 'w')) # ロング形式に変換

# フォント設定
kyokasho <- list(size = 11,
                 color = 'blue',
                 family = 'UD Digi Kyokasho NK-R')

plot_ly(x = ds$name, y = ds$value, split = ds$name, type = 'box',
        boxpoints = 'all', jitter = 0.3, pointpos = -1.8) |>
  layout(font  = kyokasho,
         title = '主タイトル',
         xaxis = list(title = '項目ラベル'),
         yaxis = list(title = 'y軸ラベル[単位]'))

plotly::box-plots

3 バイオリン図

library(vioplot)

# プロット
vioplot(d, col = COL, rectCol = 'white',
        plotCentre = 'line',
        ylim = c(-12, 12),
        names = c('U', 'V', 'W'),
        main = '主タイトル',
        xlab = '項目ラベル',
        ylab = 'y軸ラベル[単位]')

# 平均値(+)
points(apply(d, 2, mean), pch = 3)

# 罫線
abline(h = seq(-50, 50, 5), lty = 2, col = gray(0.5, 0.25))

# 凡例
legend('topleft', pch = 3, legend = '平均値')

plot_ly(x = ds$name, y = ds$value, split = ds$name, type = 'violin',
        box = list(visible = T), meanline = list(visible = T)) |>
  layout(font  = kyokasho,
         title = '主タイトル',
         xaxis = list(title = '項目ラベル'),
         yaxis = list(title = 'y軸ラベル[単位]'))

plotly::violin

4 Python

4.1 データ

import numpy as np

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

d = [u, v, w]

4.2 作図

【注意】「init.tclが見つからない」エラーが発生する場合は,Rパッケージのtclをインストールすると解消する。

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

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

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

# 項目ラベル,着色の有無     
plt.boxplot(d, labels = ['u', 'v', 'w'], patch_artist = True)
## {'whiskers': [<matplotlib.lines.Line2D object at 0x000001AFAE7A4210>, <matplotlib.lines.Line2D object at 0x000001AFAE7D99D0>, <matplotlib.lines.Line2D object at 0x000001AFAE7E9210>, <matplotlib.lines.Line2D object at 0x000001AFAE7E9D10>, <matplotlib.lines.Line2D object at 0x000001AFAE7F1B90>, <matplotlib.lines.Line2D object at 0x000001AFAE7F26D0>], 'caps': [<matplotlib.lines.Line2D object at 0x000001AFAE7DA590>, <matplotlib.lines.Line2D object at 0x000001AFAE7DB050>, <matplotlib.lines.Line2D object at 0x000001AFAE7EA810>, <matplotlib.lines.Line2D object at 0x000001AFAE7EB290>, <matplotlib.lines.Line2D object at 0x000001AFAE7F30D0>, <matplotlib.lines.Line2D object at 0x000001AFAE7F3BD0>], 'boxes': [<matplotlib.patches.PathPatch object at 0x000001AFAE7D8FD0>, <matplotlib.patches.PathPatch object at 0x000001AFAE75D090>, <matplotlib.patches.PathPatch object at 0x000001AFAE7F1210>], 'medians': [<matplotlib.lines.Line2D object at 0x000001AFAE7DB790>, <matplotlib.lines.Line2D object at 0x000001AFAE7EBCD0>, <matplotlib.lines.Line2D object at 0x000001AFAE800650>], 'fliers': [<matplotlib.lines.Line2D object at 0x000001AFAE7E8090>, <matplotlib.lines.Line2D object at 0x000001AFAE7F0850>, <matplotlib.lines.Line2D object at 0x000001AFAE801150>], 'means': []}
# 作図
plt.show()