options(digits = 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) 

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)
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))
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)
##  要求されたパッケージ ggplot2 をロード中です
## 
##  次のパッケージを付け加えます: 'plotly'
##  以下のオブジェクトは 'package:ggplot2' からマスクされています:
## 
##     last_plot
##  以下のオブジェクトは 'package:stats' からマスクされています:
## 
##     filter
##  以下のオブジェクトは 'package:graphics' からマスクされています:
## 
##     layout
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks plotly::filter(), stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
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軸ラベル[単位]'))
library(vioplot)
##  要求されたパッケージ sm をロード中です
## Package 'sm', version 2.2-6.0: type help(sm) for summary information
##  要求されたパッケージ zoo をロード中です
## 
##  次のパッケージを付け加えます: 'zoo'
##  以下のオブジェクトは 'package:base' からマスクされています:
## 
##     as.Date, as.Date.numeric
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軸ラベル[単位]'))

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]
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

plt.title('箱ひげ図')
plt.xlabel('項目ラベル')
plt.ylabel('y軸ラベル[単位]')

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 0x000001A8E5515580>, <matplotlib.lines.Line2D object at 0x000001A8E55350A0>, <matplotlib.lines.Line2D object at 0x000001A8E5516E10>, <matplotlib.lines.Line2D object at 0x000001A8E5516F30>, <matplotlib.lines.Line2D object at 0x000001A8E55360F0>, <matplotlib.lines.Line2D object at 0x000001A8E5536390>], 'caps': [<matplotlib.lines.Line2D object at 0x000001A8E55353D0>, <matplotlib.lines.Line2D object at 0x000001A8E55356D0>, <matplotlib.lines.Line2D object at 0x000001A8E5517710>, <matplotlib.lines.Line2D object at 0x000001A8E5535B80>, <matplotlib.lines.Line2D object at 0x000001A8E5536660>, <matplotlib.lines.Line2D object at 0x000001A8E5536930>], 'boxes': [<matplotlib.patches.PathPatch object at 0x000001A8E5534BC0>, <matplotlib.patches.PathPatch object at 0x000001A8E5515760>, <matplotlib.patches.PathPatch object at 0x000001A8E54E5DF0>], 'medians': [<matplotlib.lines.Line2D object at 0x000001A8E5535A00>, <matplotlib.lines.Line2D object at 0x000001A8E5534770>, <matplotlib.lines.Line2D object at 0x000001A8E5536C30>], 'fliers': [<matplotlib.lines.Line2D object at 0x000001A8E5515A00>, <matplotlib.lines.Line2D object at 0x000001A8E5535CD0>, <matplotlib.lines.Line2D object at 0x000001A8E5536F00>], 'means': []}
  
plt.show()  
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 36600 (\N{CJK UNIFIED IDEOGRAPH-8EF8}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 12521 (\N{KATAKANA LETTER RA}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 12505 (\N{KATAKANA LETTER BE}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 12523 (\N{KATAKANA LETTER RU}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 65339 (\N{FULLWIDTH LEFT SQUARE BRACKET}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 21336 (\N{CJK UNIFIED IDEOGRAPH-5358}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 20301 (\N{CJK UNIFIED IDEOGRAPH-4F4D}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 65341 (\N{FULLWIDTH RIGHT SQUARE BRACKET}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 31665 (\N{CJK UNIFIED IDEOGRAPH-7BB1}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 12402 (\N{HIRAGANA LETTER HI}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 12370 (\N{HIRAGANA LETTER GE}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 22259 (\N{CJK UNIFIED IDEOGRAPH-56F3}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 38917 (\N{CJK UNIFIED IDEOGRAPH-9805}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)
## C:\Users\naruk\AppData\Local\R\win-library\4.3\reticulate\python\rpytools\call.py:7: UserWarning: Glyph 30446 (\N{CJK UNIFIED IDEOGRAPH-76EE}) missing from current font.
##   value, error = rpycall.call_r_function(f, *args, **kwargs)