【matplotlib】年表を描く時に便利な不等な間隔をもつ線分を描く方法[Python]

  • URLをコピーしました!
目次

matplotlib

前回、Pythonのmatplotlibでグラフ全体や外側を透明にする方法を紹介しました。

今回は年表を描く時に便利な不等な間隔をもつ線分を描く方法を紹介します。

なんでそんな不等な間隔の線分を描こうかと思ったわけですが、等間隔な線分を描くのはパワーポイントなり、Keynoteなり等間隔に配置する機能があるわけで簡単にできます。

でも年表を描く時には、過去には起こった物事が少なかったり、未来は時間感覚をざっくりと考えることから、等間隔では描き表せられなかったりします。

そのため過去を短い間隔にしたり、逆に未来を短い間隔にしたりと見やすさに工夫をすることがあります。

ただその際に適当な間隔にすると結構みすぼらしくなってしまうことから、あるルールをもった不等な間隔の線分を描くプログラムを作りたくなったというのが今回のきっかけ。

それでは始めていきましょう。

不等な間隔の線分を描くプログラム

まずはプログラム全体をお見せします。

import matplotlib.pyplot as plt

points = 10
add_space = 1

x_list = [(i+add_space)*i for i in range(points)]

fig = plt.figure()
plt.clf()

plt.plot([0, x_list[-1]],[0.5, 0.5], c="black")
for x_val in x_list:
    plt.plot([x_val, x_val], [0.45, 0.55], c="black")
    
plt.ylim(0, 1)

plt.gca().axis("off")

fig.tight_layout()

plt.savefig("python-matplotlib67-1.png", transparent=True)

実行結果

このプログラムで一番重要なのは最初にそれぞれの線分の長さを決める「x_list」を作成することです。

今回の場合は「x_list = [(i+add_space)*i for i in range(points)]」として、変数pointsと繰り返しの回数iで0からの長さを「(i+add_space)*i」として取得しています。

この部分をうまく作れるかどうかで綺麗な不等間隔の線分が描けるかが決まってきます。

その後の部分はmatplotlibで線分を描き、枠を無くし、保存するということをしています。

ちなみに枠線を消す方法はこちらの記事で紹介していますので、よかったらどうぞ。

もう少し大きく変わる不等間隔の線分が欲しい場合、「1/(i+add_space)*i」とすると良い感じです。

import matplotlib.pyplot as plt

points = 10
add_space = 1

x_list = [1/(i+add_space)*i for i in range(points)]

fig = plt.figure()
plt.clf()

plt.plot([0, x_list[-1]],[0.5, 0.5], c="black")
for x_val in x_list:
    plt.plot([x_val, x_val], [0.45, 0.55], c="black")
    
plt.ylim(0, 1)

plt.gca().axis("off")

fig.tight_layout()

plt.savefig("python-matplotlib67-2.png", transparent=True)

実行結果

向きに関しては反転させて使ってください。

次回はmatplotlibでお互いを関連づけられる単位をもつ2軸を作成する方法を紹介します。

ではでは今回はこんな感じで。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次