LoginSignup
3
2

グラフのアスペクト比はどれくらいが良いか

Last updated at Posted at 2024-01-17

初めに

神は細部に宿る,と云う.

論文を読んでいると,偶に,「変に引き伸ばしたグラフだな」とか「ちょっと横に長いな」とか思うことがある.逆の立場になって,自分の論文を読んでもらうときには,「綺麗だな」と思ってもらえなくても,少なくともストレスなく読んでもらいたい.

というわけで,論文に貼り付けるグラフのアスペクト比を幾つか検討する.

一般的に「美しい」とされる貴金属比と幾つかの比率で,グラフを描画してみる.

貴金属比

貴金属比(metallic mean / ratios)とは,1と次のような連分数(continued fraction)で表される(第$n$)貴金属数との比のことを指す.

n + \cfrac{1}{n+\cfrac{1}{n+\cfrac{1}{n+\cfrac{1}{n+\cdots}}}}
= [n; n, n, n, n, \cdots]
= \frac{n + \sqrt{n^2 + 4}}{2}

ただし,$n$は自然数.

すなわち,

1 : \frac{n + \sqrt{n^2 + 4}}{2}

が(第$n$)貴金属比である.$n = 1, 2, 3$のとき,特別に名前がついている.

黄金比(第1貴金属比)

第1貴金属比は黄金比と呼ばれる.

1 : \frac{1 + \sqrt{5}}{2}
\simeq 1 : 1.618
\simeq 5 : 8

白銀比(第2貴金属比)

第2貴金属比は白銀比と呼ばれる.

1 : 1 + \sqrt{2}
\simeq 1 : 2.414
\simeq 5 : 12

青銅比(第3貴金属比)

第3貴金属比は青銅比と呼ばれる.

1 : \frac{3 + \sqrt{13}}{2}
\simeq 1 : 3.303
\simeq 5 : 16

大和比

「白銀比」という言葉は,第2貴金属比と大和比の2つを指すらしい.先に記したのは,「第2貴金属比としての白銀比」である.「大和比としての白銀比」は,以下である.

1 : \sqrt{2}
\simeq 1 : 1.414
\simeq 5 : 7

白金比

白金比は貴金属比ではない.が,美しいとされるらしい.大和比に似ている.

1 : \sqrt{3}
\simeq 1 : 1.732
\simeq 5 : 9

比較

第2,第3貴金属比はグラフのアスペクト比として使うには縦長 / 横長すぎる.

白金比($5:9$),黄金比($5:8$),大和比($5:7$)を比較する.

比較に使う図は,MatplotlibのStyle sheets referenceを基に作成する(一つの図に載せるデータは高々4~5程度にすべきと思っているので,若干修正している).

白金比($5:9$) 黄金比($5:8$) 大和比($5:7$)
style_default_ratio_(9, 5).png style_default_ratio_(8, 5).png style_default_ratio_(7, 5).png

plt.style.use("default")などとして,図化のスタイルを変更できるので,幾つかのスタイルで試す(クリックしてズーム).

seaborn classic bmh ggplot
白金比 style_seaborn_ratio_(9, 5).png style_classic_ratio_(9, 5).png style_bmh_ratio_(9, 5).png style_ggplot_ratio_(9, 5).png
黄金比 style_seaborn_ratio_(8, 5).png style_classic_ratio_(8, 5).png style_bmh_ratio_(8, 5).png style_ggplot_ratio_(8, 5).png
大和比 style_seaborn_ratio_(7, 5).png style_classic_ratio_(7, 5).png style_bmh_ratio_(7, 5).png style_ggplot_ratio_(7, 5).png

終わりに

個人的には大和比($5:7$)が好きな気がする.

Appendix

MatplotlibのStyle sheets referenceを基に作成した.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10., 10., 21)

shifts = np.linspace(-5, 5, 5)
amplitudes = np.linspace(1., 2., 5)

def sigmoid(x, x0):
    return 1 / (1 + np.exp(-(x - x0)))

style = "default"
plt.style.use(style)

ratio = (9, 5)
plt.figure(figsize=ratio)

for i, (x0, a) in enumerate(zip(shifts, amplitudes)):
    plt.plot(x, a * sigmoid(x, x0), marker="s", label=f"Series-{i}")

plt.legend(loc="upper left", facecolor="w", framealpha=1.)
plt.xlim([-10., 10.])
plt.ylim([-.2, 2.2])
plt.tight_layout()
plt.show()
3
2
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
3
2