イントロダクション
図と言っても、用途や見せ方によって多くの種類があり、世の中には自分の知らないものがあるものです。
そこでよく使われる図をまとめ、議事録やプログラムでも使えるように、python
やmermaid
(markdownエディタでよくサポートされているjavascriptライブラリ)のコードも作りました。
こちらの記事をベースに一部内容を編集して共有します。
一覧
サンプル : pはpython(主にmatplotlibで作成した図), mはmermaidで作ったサンプルを載せています。
名前 | 用途 | サンプル | 備考 |
---|---|---|---|
折れ線グラフ | 時系列データ、スペクトル | p | |
棒グラフ | 量の比較 | p | |
円グラフ | 割合 | p | |
ヒストグラム | データの分布 | p | |
レーダーチャート | 項目の評価 | p | |
散布図 | 離散データ | p | |
パレート図 | 重要な項目抽出 | p | |
クラス図 | モデルを表す | m | UML |
シーケンス図 | オブジェクト間のやり取り | m | UML |
フローチャート | 流れ | m | |
ガントチャート | 進捗確認 | m | |
樹形図 | 枝分かれ | m | |
箱ひげ図 | 誤差 | p | |
等値線図 | 天気図 | p | |
アローダイアグラム | 矢印で工期 | m | |
サイクル図 | ループ | m | |
流線図 | 矢印でベクトルを示す | p | |
テーブル | 表 | - |
mermaid
はデスクトップエディタならTypora、vscode
で書くならMarkdown Preview Mermaid Support
、ブラウザならmermaid live editorで読み込むことができます。
mermaidについては以前の記事も参考にしてください。
折れ線グラフ
- 時系列データ、スペクトル、運行ダイヤグラムを示す
- 必ずしも軸は線形でなくてもよい(片対数、両対数グラフ等)
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(5)
y = x**2
plt.plot(x, y)
plt.show()
棒グラフ
- 他者と量を比較
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(3)
y = np.array([100, 30, 70])
plt.bar(x, y)
円グラフ
- 割合を円で示す
import numpy as np
import matplotlib.pyplot as plt
x = np.array([12, 23, 100])
str_label = ['a', 'b', 'c']
plt.pie(x, labels=str_label, counterclock=False, startangle=90)
ヒストグラム
- データの分布を示す
import numpy as np
import matplotlib.pyplot as plt
x = np.random.normal(50, 10, 100)
plt.hist(x)
レーダーチャート
- 項目を数値で評価するときに使用
import numpy as np
import matplotlib.pyplot as plt
labels = ['a', 'b', 'c', 'd']
values = [10, 20, 30, 40]
angles = np.linspace(0, 2*np.pi, len(labels) + 1, endpoint=True)
values = np.concatenate((values, [values[0]]))
fig = plt.figure()
ax = fig.add_subplot(111, polar=True)
ax.plot(angles, values, 'o-')
ax.fill(angles, values, alpha=0.25)
ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels)
散布図
- 離散データを示す
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(10)
y = np.random.rand(10)
plt.scatter(x, y)
パレート図
- 重要な項目を抽出
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(4)
y1 = np.array([10, 5, 3, 2])
sum_y1 = np.sum(y1)
y2 = np.cumsum(y1) / sum_y1
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twinx()
ax1.bar(x, y1)
ax2.plot(x, y2, c='r')
クラス図
- システムの構造を表す
- 状態遷移図、オブジェクト図、パッケージ図へ応用可
-
mermaid
使用(classDiagram
は実験的機能)
シーケンス図
- オブジェクト間のやり取りを時系列に沿って表現
-
mermaid
使用
フローチャート
- 流れを示す
- アクティビティ図へ応用可
-
mermaid
使用
ガントチャート
- 時系列でタスクの進捗を示す
-
mermaid
使用
樹形図
- 事象の場合分け、家系図で使用
- マインドマップ(思考を整理するための図)や特性要因図(問題を洗い出すための図)
-
mermaid
を応用
箱ひげ図
- データのばらつきを示す
import numpy as np
import matplotlib.pyplot as plt
spread = np.random.rand(50) * 100
center = np.ones(25) * 50
flier_high = np.random.rand(10) * 100 + 100
flier_low = np.random.rand(10) * -100
data = np.concatenate((spread, center, flier_high, flier_low))
plt.boxplot(data)(self, parameter_list):
等値線図
- 等高線図や天気図
- matplotlibを使用
import numpy as np
import matplotlib.pyplot as plt
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2
CS = plt.contour(X, Y, Z)
アローダイアグラム
- 日程計画を決定するための図
-
mermaid
使用
サイクル図
- PDCAやリサイクルを示す
- 要は無限ループ
-
mermaid
使用
流線図
- ものや人の流れを矢印で示した図
- 統計地図、流体解析、電磁界解析へ応用
import numpy as np
import matplotlib.pyplot as plt
X = [1, 3]
Y = [2, 4]
U = [5, 60]
V = [70, 8]
plt.quiver(X, Y, U, V)
テーブル
- エクセルなどの表
- マトリックス図
a | n |
---|---|
b | 1 |
c | 2 |
終わりに
コードや説明にミスがあればご連絡ください。
また、追加すべき図があればできる範囲で対応します。
参考文献
- よく使う図のまとめとpython、markdownのコード - snova301のブログ
- ダイアグラム - Wikipedia
- ダイアグラム - artscape
- Category:グラフ - Wikipedia
- 統計をグラフにあらわそう(種類と特徴) - 統計局
- プレゼンや思考整理に役立つ【図・表・グラフ】25パターン - NAVERまとめ
- 覚えておきたいチャート図7種類を紹介! - ferret
- コバトンと学ぶこども統計クラブ - 埼玉県
- 箱ひげ図の見方 - 統計WEB
- mermaid - GitHub
- matplotlib公式
- Python でデータサイエンス
- DeepAge
- Matplotlibでレーダーチャートを描く(16行) - Qiita
- 【厳選】Python実務データ分析でよく使う手法(分析手法編) - Qiita
- matplotlibで左右に2つの軸があるグラフを書く方法 - Qiita
- mermaid live editor
- QC七つ道具 - 日科技研
- 品質管理の基礎 - 品質管理の知識
- QC7つ道具 - Wikipedia
- UML超入門 - ObjectClub
- よく聞くUMLって何? - Qiita