Pythonでの図面作成は、データ可視化やグラフ描画だけでなく、簡単な設計図やレイアウト図、さらにはCADのような2D図面まで描ける非常に強力なツールセットを提供します。
ここでは、Pythonを使った図面作成の基礎について、以下の構成で詳しく解説します。
目次
図面作成とは?Pythonで何ができるのか
Pythonで「図面作成」と言うと、以下のようなことが可能です。
| 図面の種類 | 使用例 | 使用ライブラリ |
|---|---|---|
| データグラフ | 折れ線グラフ、棒グラフ、円グラフ | matplotlib, seaborn, plotly |
| 2D図形 | 線、円、矩形、自由曲線 | matplotlib, turtle, Pillow, svgwrite |
| ベクターグラフィック | SVG形式のイラスト、アイコン | svgwrite, cairo |
| 簡易CAD図面 | 建築図、構造図のような直線図面 | matplotlib, shapely, cadquery |
| インタラクティブ描画 | ユーザー操作に反応する図形 | plotly, bokeh, PyQtGraph |
基本のライブラリとその特徴
matplotlib(最も定番の描画ライブラリ)
- 科学技術系のグラフから、基本的な2D図形描画まで対応。
- 高いカスタマイズ性。
- オブジェクト指向スタイルで構図管理ができる。
import matplotlib.pyplot as plt
# 基本図形の描画(直線と円)
fig, ax = plt.subplots()
ax.plot([0, 1], [0, 1], label='Line') # 線
circle = plt.Circle((0.5, 0.5), 0.3, fill=False, color='red')
ax.add_patch(circle)
ax.set_aspect('equal')
ax.legend()
plt.grid(True)
plt.show()
Pythonで図面を作成するプロセス(汎用的なステップ)
- キャンバスの用意
→ 描画領域(figure, surfaceなど)を作成する。 - 描画スタイルの定義
→ 線の色、太さ、ラベル、グリッドなどを設定する。 - 図形の配置(座標指定)
→ 座標系を理解して、適切な位置に図形を置く。 - 図形の描画
→ 線、円、矩形、多角形などを配置。 - 保存または表示
→plt.savefig(),turtle.done(),svgwrite.save()などで出力。
図面作成に役立つTips
| テクニック | 内容 |
|---|---|
| アスペクト比の固定 | 建築・CAD的な図面では縦横比を固定(ax.set_aspect('equal')) |
| グリッド表示 | 座標軸の認識を助ける(plt.grid(True)) |
| 座標ラベルの表示 | ax.text(x, y, "label") で図面中に注釈を入れる |
| オブジェクト指向描画 | Figure, Axes を使って複雑な図面を構造的に管理 |
| 単位系の明示 | インチ、ピクセル、mmなどの単位をコメントや凡例に入れておく |
より高度な図面作成(発展編)
shapely+matplotlib
→ 幾何学図形(交差、バッファ、ポリゴン合成)を扱う建築・GIS向け図面。cadquery
→ OpenSCAD風のスクリプトで3Dモデリング可能なCADライブラリ。plotly/bokeh
→ インタラクティブな図面や、ズーム・パン可能な図面作成に。
参考リンクと学習素材
| タイトル | リンク |
|---|---|
| Matplotlib公式 | https://matplotlib.org/stable/index.html |
| Turtle Graphics 教材 | https://docs.python.org/ja/3/library/turtle.html |
| svgwrite GitHub | https://github.com/mozman/svgwrite |
| CadQuery (3D CAD) | https://cadquery.readthedocs.io/en/latest/ |
まとめ

Pythonによる図面作成は、初学者向けの教育用から、実務にも使えるベクター図・設計図作成まで幅広く対応できます。
まずは matplotlib で図形の基本操作に慣れた上で、svgwrite や shapely のような専門的ライブラリにステップアップすると良いでしょう。
以上、Pythonの図面作成の基礎についてでした。
最後までお読みいただき、ありがとうございました。
