LoginSignup
197
237

More than 3 years have passed since last update.

よく使う図とmarkdown、pythonでの作り方

Last updated at Posted at 2019-06-01

イントロダクション

図と言っても、用途や見せ方によって多くの種類があり、世の中には自分の知らないものがあるものです。
そこでよく使われる図をまとめ、議事録やプログラムでも使えるように、pythonmermaid(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はデスクトップエディタならTyporavscodeで書くなら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()

折れ線グラフ.png

棒グラフ

  • 他者と量を比較
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(3)
y = np.array([100, 30, 70])
plt.bar(x, y)

棒グラフ.png

円グラフ

  • 割合を円で示す
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)

円グラフ.png

ヒストグラム

  • データの分布を示す
import numpy as np
import matplotlib.pyplot as plt

x = np.random.normal(50, 10, 100)
plt.hist(x)

ヒストグラム.png

レーダーチャート

  • 項目を数値で評価するときに使用
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)

レーダーチャート.png

散布図

  • 離散データを示す
import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(10)
y = np.random.rand(10)
plt.scatter(x, y)

散布図.png

パレート図

  • 重要な項目を抽出
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')

パレート図.png

クラス図

  • システムの構造を表す
  • 状態遷移図、オブジェクト図、パッケージ図へ応用可
  • mermaid使用(classDiagramは実験的機能)
classDiagram

Class01 <|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 <--> C2: Cool label

クラス図.png

シーケンス図

  • オブジェクト間のやり取りを時系列に沿って表現
  • mermaid使用
sequenceDiagram
    participant Alice
    participant Bob
    Alice->>John: Hello John, how are you?
    loop Healthcheck
        John->>John: Fight against hypochondria
    end
    Note right of John: Rational thoughts <br/>prevail...
    John-->>Alice: Great!
    John->>Bob: How about you?
    Bob-->>John: Jolly good!

シーケンス図.png

フローチャート

  • 流れを示す
  • アクティビティ図へ応用可
  • mermaid使用
graph TD

A-->B
A-->C
B-->D
C-->D

フローチャート.png

ガントチャート

  • 時系列でタスクの進捗を示す
  • mermaid使用
gantt
dateFormat  YYYY-MM-DD
title Adding GANTT diagram to mermaid

section A section
Completed task            :done,    des1, 2014-01-06,2014-01-08
Active task               :active,  des2, 2014-01-09, 3d
Future task               :         des3, after des2, 5d
Future task2               :         des4, after des3, 5d

ガントチャート.png

樹形図

  • 事象の場合分け、家系図で使用
  • マインドマップ(思考を整理するための図)や特性要因図(問題を洗い出すための図)
  • mermaidを応用
graph LR

A---B
A---C
B---D
B---E
C---F

樹形図.png

箱ひげ図

  • データのばらつきを示す
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):

箱ひげ図.png

等値線図

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)

等値線図.png

アローダイアグラム

  • 日程計画を決定するための図
  • mermaid使用
graph TD

1 -->|1 day| 2
2 -->|2 days| 3
2 -->|4 days| 4
3 -->|3 days| 5
4 -->|3 hours| 5

アローダイアグラム.png

サイクル図

  • PDCAやリサイクルを示す
  • 要は無限ループ
  • mermaid使用
graph LR

P-->D
D-->C
C-->A
A-->P

サイクル図.png

流線図

  • ものや人の流れを矢印で示した図
  • 統計地図、流体解析、電磁界解析へ応用
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)

流線図.png

テーブル

  • エクセルなどの表
  • マトリックス図
a n
b 1
c 2

終わりに

コードや説明にミスがあればご連絡ください。
また、追加すべき図があればできる範囲で対応します。

参考文献

197
237
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
197
237