#【データフレームの作成】
# カラム(列)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)) # ライトグリーン
—`
# 棒グラフ(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軸ラベル[単位]"))
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()