Notebook

これは日々の作業を通して学んだことや毎日の生活で気づいたことをを記録しておく備忘録である。

HTML ファイル生成日時: 2024/09/11 17:53:24.921 (台灣標準時)

Matplotlib で作る図の縦横比

Matplotlib で図を作る際、図の縦横比を自分で指定したい場合があるでござる。

まずは、特に何も指定せずに以下のように作図してみるでござる。


#!/usr/pkg/bin/python3.9

#
# Time-stamp: <2022/05/18 09:05:44 (CST) daisuke>
#

# importing numpy module
import numpy

# importing matplotlib module
import matplotlib.figure
import matplotlib.backends.backend_agg

# output file
file_output = 'test_00.png'

# data
data_x = numpy.linspace (0.0, 20.0, 1000)
data_y = 0.5 * data_x

# making objects "fig" and "ax"
fig = matplotlib.figure.Figure ()
matplotlib.backends.backend_agg.FigureCanvasAgg (fig)
ax = fig.add_subplot (111)

# axes
ax.set_xlabel ("X")
ax.set_ylabel ("Y")
ax.set_xlim (0.0, 20.0)
ax.set_ylim (0.0, 10.0)

# plotting data
ax.plot (data_x, data_y, '-', label=r'$y=0.5x$')

# saving file
fig.savefig (file_output, dpi=225)

上のスクリプトを実行すると、以下のような図ができるでござる。 4:3 の縦 横比の横長の長方形の領域全体を使って図が作られるでござる。

fig_202205/test_00.png

次に、 set_aspect を使ってみるでござる。以下のようなスクリプトを用意し てみるでござる。


#!/usr/pkg/bin/python3.9

#
# Time-stamp: <2022/05/18 09:06:51 (CST) daisuke>
#

# importing numpy module
import numpy

# importing matplotlib module
import matplotlib.figure
import matplotlib.backends.backend_agg

# output file
file_output = 'test_01.png'

# data
data_x = numpy.linspace (0.0, 20.0, 1000)
data_y = 0.5 * data_x

# making objects "fig" and "ax"
fig = matplotlib.figure.Figure ()
matplotlib.backends.backend_agg.FigureCanvasAgg (fig)
ax = fig.add_subplot (111)

# axes
ax.set_xlabel ("X")
ax.set_ylabel ("Y")
ax.set_xlim (0.0, 20.0)
ax.set_ylim (0.0, 10.0)

ax.set_aspect ('equal')

# plotting data
ax.plot (data_x, data_y, '-', label=r'$y=0.5x$')

# saving file
fig.savefig (file_output, dpi=225)

上のスクリプトを実行してみると、以下のような図ができるでござる。 set_aspect で equal を指定すると、 X 軸と Y 軸のスケールが同じになるで ござる。つまり、 X 軸の 0 から 1 と Y 軸の 0 から 1 が同じ間隔で描かれ るでござる。

fig_202205/test_01.png

スケールを同じにしたいのではなく、正方形の図を作りたいという場合もある でござる。それには、以下のようなスクリプトにすればよいようでござる。


#!/usr/pkg/bin/python3.9

#
# Time-stamp: <2022/05/18 09:07:40 (CST) daisuke>
#

# importing numpy module
import numpy

# importing matplotlib module
import matplotlib.figure
import matplotlib.backends.backend_agg

# output file
file_output = 'test_02.png'

# data
data_x = numpy.linspace (0.0, 20.0, 1000)
data_y = 0.5 * data_x

# making objects "fig" and "ax"
fig = matplotlib.figure.Figure ()
matplotlib.backends.backend_agg.FigureCanvasAgg (fig)
ax = fig.add_subplot (111)

# axes
ax.set_xlabel ("X")
ax.set_ylabel ("Y")
ax.set_xlim (0.0, 20.0)
ax.set_ylim (0.0, 10.0)

ax.set_box_aspect (1)

# plotting data
ax.plot (data_x, data_y, '-', label=r'$y=0.5x$')

# saving file
fig.savefig (file_output, dpi=225)

上のスクリプトを実行すると、以下のような図ができるでござる。 X 軸で表 されている範囲と Y 軸で表されている範囲は異なるのでござるが、図自体が 正方形になっているでござる。

fig_202205/test_02.png


Frequently accessed files

  1. Computer___Python/20220518_0.html
  2. Computer___Network/20230726_00.html
  3. Computer___Network/20230516_00.html
  4. Misc___Taiwan/20240207_00.html
  5. Computer___FreeBSD/20220621_0.html
  6. Computer___Python/20220715_0.html
  7. Food___Taiwan/20220429_0.html
  8. Computer___Network/20230508_00.html
  9. Computer___NetBSD/20220817_3.html
  10. Computer___Python/20220410_0.html
  11. Computer___Debian/20210223_1.html
  12. Computer___Network/20240416_00.html
  13. Computer___Python/20210124_0.html
  14. Computer___NetBSD/20220818_1.html
  15. Computer___NetBSD/20220428_0.html
  16. Computer___Python/20221013_0.html
  17. Computer___Network/20240130_00.html
  18. Computer___NetBSD/20230119_00.html
  19. Science___Math/20220420_0.html
  20. Computer___TeX/20230503_00.html
  21. Computer___NetBSD/20230515_00.html
  22. Science___Astronomy/20220503_0.html
  23. Computer___NetBSD/20240101_02.html
  24. Computer___NetBSD/20220808_0.html
  25. Computer___Python/20240101_00.html
  26. Travel___Taiwan/20220809_2.html
  27. Computer___NetBSD/20210204_0.html
  28. Computer___Python/20220816_1.html
  29. Food___Taiwan/20230526_00.html
  30. Computer___Network/20220413_1.html


HTML file generated by Kinoshita Daisuke.