0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Matplotlib の破線が密に見える理由 — 道路の白線をヒントに

Posted at

はじめに

Matplotlib でグラフを描いていると、破線が少し密すぎると感じることがあります。

例えば、デフォルト設定で描画すると次のようになります。

plt.plot(x, y, linestyle="--")

image.png

仕様としては正しいのですが、
もう少し余白があったほうが読みやすいのでは、と思うことがあります。

では、人はどんな破線を見やすいと感じるのでしょうか。
その基準は、どこから来るのでしょうか。

Matplotlib の破線の基準

Matplotlib のデフォルト破線の間隔は、次のように確認できます。

import matplotlib as mpl
print(mpl.rcParams["lines.linewidth"])        # 1.5
print(mpl.rcParams["lines.dashed_pattern"])   # [3.7, 1.6]

内部的には、以下のように定義されています。

  • 太さ:1.5 pt
  • 線:3.7 pt
  • 空白:1.6 pt

pt は印刷由来の単位で、
線に比べて空白が短い間隔で設定されていることが分かります。

つまりこの破線は、
静止した図として「破線らしく見えること」を意識して設計されているように見えます。

人は別の破線に慣れている

一方で、私たちは日常的に道路の白線を見ています。
高速道路でも一般道でも、破線は当たり前の存在です。

実は、これらの破線は Matplotlib の破線より粗いにもかかわらず、
とても見やすく感じられることが多いように思います。

image.png

例えば図のように、高速道路の破線は次のようになっています。

  • 線の太さ:約 0.15 m
  • 線の長さ:8 m
  • 空白の長さ:12 m

空白の占める割合が比較的多いことが分かります。

仮説:人は見慣れた構造を好む

ここから、ひとつの仮説が考えられます。

人は、見慣れてきた構造を持つ破線を見やすいと感じるのではないか、というものです。
もしそうだとすると、Matplotlib の破線が少し密に感じられるのは、
日常で慣れ親しんだ破線構造と異なっているためかもしれません。

比べてみる

道路の破線をそのままコピーする必要はありません。
8 m を pt に変換する必要もありません。

重要なのは、

0.15 : 8 : 12 という三項の比率を保つこと

だと考えられます。

Matplotlib ではすべて pt 単位になるため、
スケールを自由に取って次のように書くことができます。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y = x
k = 5

fig, ax = plt.subplots(figsize=(5, 5))

ax.plot(x, y, linestyle="--", label="matplotlib default (--)")
ax.plot(
    x, y - 1,
    linewidth=0.15 * k,
    linestyle=(0, (8 * k, 12 * k)),
    label="road (highway): 0.15 : 8 : 12"
)

ax.set_title("Dashed line patterns inspired by road markings")
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.legend()
plt.tight_layout()
plt.show()

image.png

デフォルト破線と比べると、線と空白が間延びした、高速道路を意識した破線が得られました。
見慣れた構造のためか、デフォルトよりも美しく感じられます。
線幅や破線の間隔に悩んだとき、高速道路の設計は参考になりそうです。

おわりに

Matplotlib のデフォルト破線は間違っているわけではありません。
ただ、それが唯一の正解とも限りません。

可視化はデータの問題であると同時に、
人がどんな構造に慣れてきたかという側面も持っているように思います。

破線が少し見づらいと感じたとき、
足りないのはデータではなく、
私たちが慣れ親しんできた「比率」なのかもしれません。

参考

区画線の豆知識 【寸法編】

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?