データ

#【データフレームの作成】
# カラム(列)u,v,wを持つデータフレームを作成する。 
d <- data.frame(
  u = c(10, 20, 30),
  v = c(40, 80, 90),
  w = c(20, 50, 40))

#【レコード名(行名)の作成】
# ISO形式("yyyy-mm-dd")で開始日,終了日を作成し,
# 時間オブジェクトに変換(as.POSIXct)する。
# 数列作成関数seqを使って日付を作成する。
# 増分(by)は月単位("month")とする。
px <- seq(as.POSIXct("2023-01-01"),
          as.POSIXct("2023-03-01"), by = "month")

# 作成した日付をレコード名(行名)にする。
rownames(d) <- px

# 作成したデータフレームを表形式で表示する。
library(kableExtra)
kable(d) |> kable_classic("striped", full_width = F)
u v w
2023-01-01 10 40 20
2023-02-01 20 80 50
2023-03-01 30 90 40
# Pythonグラフ用にデータをCSVファイル形式で保存しておく。
# (オプションquote = Fで文字列に””を付けない)
write.csv(d, file = "barplot_py.csv", quote = F)
# カラーパレット
COL <- c(rgb(255,   0, 255,  55, max = 255), # ピンク
         rgb(  0,   0, 255,  55, max = 255), # ラベンダー
         rgb(  0, 255,   0,  55, max = 255)) # ライトグリーン

RGB_Color

—`

棒グラフ

# 棒グラフ(barplot)関数は行列(matrix)を引数にとるので
# データフレームを行列に変換する。
m <- as.matrix(d)

1行目(2023-01-01)のデータを棒グラフにした例

i <- 1 # 行番号

# 作図
barplot(m[i, ], col = COL[2],
        main = rownames(m)[i],
        xlab = "項目ラベル",
        ylab = "y軸ラベル[単位]")

# 格子線
abline(h = seq(0, 100, 5), lty = 2, col = gray(0.5, 0.25))

積上棒グラフ

# 作図
barplot(m, col = COL,
        main = "主タイトル",
        xlab = "項目ラベル",
        ylab = "y軸ラベル[単位]")

# 格子線
abline(h = seq(0, 300, 50), lty = 2, col = gray(0.5, 0.25))

# 凡例
legend("topleft", fill = COL, legend = rownames(m))

行列を転置(transpose; t())すると行列の縦横が逆になる。

# 作図
barplot(t(m), col = COL,
        main = "主タイトル",
        xlab = "項目ラベル",
        ylab = "y軸ラベル[単位]")

# 格子線
abline(h = seq(0, 300, 50), lty = 2, col = gray(0.5, 0.25))

# 凡例
#【注意】rownamesからcolnamesに変更
legend("topleft", fill = COL, legend = colnames(m))

集合棒グラフ

# 作図
# オプションbeside = Tで集合棒グラフになる。
barplot(m, col = COL, beside = T,
        main = "主タイトル",
        xlab = "項目ラベル",
        ylab = "y軸ラベル[単位]")

# 格子線
abline(h = seq(0, 100, 20), lty = 2, col = gray(0.5, 0.25))

# 凡例
legend("topleft", fill = COL, legend = rownames(m))

行列を転置(transpose; t())すると行列の縦横が逆になる。

# 作図
barplot(t(m), col = COL, beside = T,
        main = "主タイトル",
        xlab = "項目ラベル",
        ylab = "y軸ラベル[単位]")

# 格子線
abline(h = seq(0, 100, 20), lty = 2, col = gray(0.5, 0.25))

# 凡例
legend("topleft", fill = COL, legend = colnames(m)) # rownamesからcolnamesに変更

library(plotly)

px.g <- format(px, "%Y年%m月")

# plot_lyはデータフレームを引数にとる
plot_ly(type = "bar") |>
  add_trace(x = px.g, y = d$u, name = "u", marker = list(color = COL[1])) |>
  add_trace(x = px.g, y = d$v, name = "v", marker = list(color = COL[2])) |>
  add_trace(x = px.g, y = d$w, name = "w", marker = list(color = COL[3])) |>
  layout(barmode = "group",
         title = "主タイトル",
         xaxis = list(title = "項目ラベル"),
         yaxis = list(title = "y軸ラベル[単位]"))

転置したグラフ

# 行列を転置しデータフレーム化
dt <- as.data.frame(t(m))

rn <- rownames(dt) # 行名

plot_ly(type = "bar") |>
  add_trace(x = rn, y = dt[, 1], name = px.g[1], marker = list(color = COL[1])) |>
  add_trace(x = rn, y = dt[, 2], name = px.g[2], marker = list(color = COL[2])) |>
  add_trace(x = rn, y = dt[, 3], name = px.g[3], marker = list(color = COL[3])) |>
  layout(barmode = "group",
         title = "主タイトル",
         xaxis = list(title = "項目ラベル"),
         yaxis = list(title = "y軸ラベル[単位]"))

plotly::bar-charts

Python

データ

import pandas as pd

# CSVデータの読み込み
d = pd.read_csv("barplot_py.csv")
d = d.rename(columns = {"Unnamed: 0": "px"}) # カラム名を変更

棒グラフ

import numpy as np
import matplotlib.pyplot as plt

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

# 項目ラベル
pos = np.arange(len(d))
plt.xticks(pos, d["px"])
## ([<matplotlib.axis.XTick object at 0x0000023A62ADD6A0>, <matplotlib.axis.XTick object at 0x0000023A62ADC0E0>, <matplotlib.axis.XTick object at 0x0000023A62ABAE10>], [Text(0, 0, '2023-01-01'), Text(1, 0, '2023-02-01'), Text(2, 0, '2023-03-01')])
# 格子線(grid lines)
plt.grid(linestyle = "--", axis = "y", color = (0.8, 0.8, 0.8, 0.25))

# 作図
plt.bar(x = pos, height = np.array(d["u"]), color = (1.0, 0.0, 1.0, 0.2))

# 図表示
plt.show()

積上棒グラフ

import numpy as np
import matplotlib.pyplot as plt

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

# 項目ラベル
pos = range(len(d))
plt.xticks(pos, d["px"])
## ([<matplotlib.axis.XTick object at 0x0000023A62ADE6C0>, <matplotlib.axis.XTick object at 0x0000023A62B5D730>, <matplotlib.axis.XTick object at 0x0000023A62B5BB00>], [Text(0, 0, '2023-01-01'), Text(1, 0, '2023-02-01'), Text(2, 0, '2023-03-01')])
# 格子線(grid lines)
plt.grid(linestyle = "--", axis = "y", color = (0.8, 0.8, 0.8, 0.25))

# プロット
plt.bar(x = pos, height = d["u"], color = (1.0, 0.0, 1.0, 0.2))
plt.bar(x = pos, height = d["v"], color = (0.0, 1.0, 0.0, 0.2), bottom = d["u"])
plt.bar(x = pos, height = d["w"], color = (0.0, 0.0, 1.0, 0.2), bottom = np.add(d["u"], d["v"]))

# 図表示
plt.show()

集合棒グラフ

import numpy as np
import matplotlib.pyplot as plt

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

# 項目ラベル
pos = np.arange(len(d))
plt.xticks(pos, d["px"])
## ([<matplotlib.axis.XTick object at 0x0000023A62BAF410>, <matplotlib.axis.XTick object at 0x0000023A62BAF590>, <matplotlib.axis.XTick object at 0x0000023A64C19040>], [Text(0, 0, '2023-01-01'), Text(1, 0, '2023-02-01'), Text(2, 0, '2023-03-01')])
# 格子線(grid lines)
plt.grid(linestyle = "--", axis = "y", color = (0.8, 0.8, 0.8, 0.25))

# バー幅
width = 1/(len(d)+1)

# 作図
plt.bar(x = pos - width, height = d["u"], width = width, color = (1.0, 0.0, 1.0, 0.2))
plt.bar(x = pos,         height = d["v"], width = width, color = (0.0, 1.0, 0.0, 0.2))
plt.bar(x = pos + width, height = d["w"], width = width, color = (0.0, 0.0, 1.0, 0.2))

# 図表示
plt.show()