draw_unit_cell プログラム仕様
単位格子を描画するスクリプト。
- 概要:
結晶学における単位格子を3Dで可視化する機能を提供します。
- 詳細説明:
任意の格子定数と角度から単位格子の形状を計算し、Matplotlibを使用して描画します。 基本ベクトル(a, b, c)の描画には、パースペクティブを考慮したカスタム3D矢印クラスを使用します。
- 関連リンク:
draw_unit_cell_usage
- class crystal.draw_unit_cell.Arrow3D(xs, ys, zs, *args, **kwargs)
ベースクラス:
FancyArrowPatch- 概要:
Matplotlibの3Dプロットでカスタムの3D矢印を描画するためのクラス。
- 詳細説明:
FancyArrowPatch を継承し、3D空間内の座標を2Dスクリーン座標に変換して描画することで、 常に適切なパースペクティブで矢印が表示されるようにします。
- do_3d_projection(renderer=None)
- 概要:
3Dプロジェクションを実行し、矢印の深度を計算します。
- 詳細説明:
3D座標を2Dスクリーン座標に変換し、Z軸方向の最小値(深度)を返すことで、 3Dビューにおけるオブジェクトの描画順序を適切に管理します。
- 引数:
- param renderer:
Matplotlibのレンダラーオブジェクト(オプション)。
- type renderer:
matplotlib.backend_bases.RendererBase
- 戻り値:
- returns:
矢印のZ軸方向の最小値(深度)。
- rtype:
numpy.float
- draw(renderer)
- 概要:
矢印をレンダリングします。
- 詳細説明:
3D座標を2Dスクリーン座標に変換し、変換された座標を使用して矢印を描画します。
- 引数:
- param renderer:
Matplotlibのレンダラーオブジェクト。
- type renderer:
matplotlib.backend_bases.RendererBase
- 戻り値:
- returns:
なし
- rtype:
None
- set(*, agg_filter=<UNSET>, alpha=<UNSET>, animated=<UNSET>, antialiased=<UNSET>, arrowstyle=<UNSET>, capstyle=<UNSET>, clip_box=<UNSET>, clip_on=<UNSET>, clip_path=<UNSET>, color=<UNSET>, connectionstyle=<UNSET>, edgecolor=<UNSET>, edgegapcolor=<UNSET>, facecolor=<UNSET>, fill=<UNSET>, gid=<UNSET>, hatch=<UNSET>, hatch_linewidth=<UNSET>, hatchcolor=<UNSET>, in_layout=<UNSET>, joinstyle=<UNSET>, label=<UNSET>, linestyle=<UNSET>, linewidth=<UNSET>, mouseover=<UNSET>, mutation_aspect=<UNSET>, mutation_scale=<UNSET>, patchA=<UNSET>, patchB=<UNSET>, path_effects=<UNSET>, picker=<UNSET>, positions=<UNSET>, rasterized=<UNSET>, sketch_params=<UNSET>, snap=<UNSET>, transform=<UNSET>, url=<UNSET>, visible=<UNSET>, zorder=<UNSET>)
Set multiple properties at once.
a.set(a=A, b=B, c=C)
is equivalent to
a.set_a(A) a.set_b(B) a.set_c(C)
In addition to the full property names, aliases are also supported, e.g.
set(lw=2)is equivalent toset(linewidth=2), but it is an error to pass both simultaneously.The order of the individual setter calls matches the order of parameters in
set(). However, most properties do not depend on each other so that order is rarely relevant.Supported properties are
- Properties:
agg_filter: a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array and two offsets from the bottom left corner of the image alpha: float or None animated: bool antialiased or aa: bool or None arrowstyle: [ '-' | '<-' | '->' | '<->' | '<|-' | '-|>' | '<|-|>' | ']-' | '-[' | ']-[' | '|-|' | ']->' | '<-[' | 'simple' | 'fancy' | 'wedge' ] capstyle: .CapStyle or {'butt', 'projecting', 'round'} clip_box: ~matplotlib.transforms.BboxBase or None clip_on: bool clip_path: Patch or (Path, Transform) or None color: :mpltype:`color` connectionstyle: [ 'arc3' | 'angle3' | 'angle' | 'arc' | 'bar' ] edgecolor or ec: :mpltype:`color` or None edgegapcolor: :mpltype:`color` or None facecolor or fc: :mpltype:`color` or None figure: ~matplotlib.figure.Figure or ~matplotlib.figure.SubFigure fill: bool gid: str hatch: {'/', '\', '|', '-', '+', 'x', 'o', 'O', '.', '*'} hatch_linewidth: unknown hatchcolor: :mpltype:`color` or 'edge' or None in_layout: bool joinstyle: .JoinStyle or {'miter', 'round', 'bevel'} label: object linestyle or ls: {'-', '--', '-.', ':', '', ...} or (offset, on-off-seq) linewidth or lw: float or None mouseover: bool mutation_aspect: float mutation_scale: float patchA: .patches.Patch patchB: .patches.Patch path_effects: list of .AbstractPathEffect picker: None or bool or float or callable positions: unknown rasterized: bool sketch_params: (scale: float, length: float, randomness: float) snap: bool or None transform: ~matplotlib.transforms.Transform url: str visible: bool zorder: float
- crystal.draw_unit_cell.draw_unit_cell_plot(a, b, c, alpha, beta, gamma, elev=5.9, azim=-67.55, fontsize=24, color='blue')
- 概要:
指定された格子定数と角度を持つ単位格子を3Dで描画します。
- 詳細説明:
lattice_vectors 関数を使用して基本格子ベクトルを計算し、それらから単位格子の8つの頂点を生成します。 その後、Matplotlibを用いて単位格子の辺、頂点、および基本格子ベクトルを3D空間に描画します。
- 引数:
- param a:
格子定数aの長さ。
- type a:
float
- param b:
格子定数bの長さ。
- type b:
float
- param c:
格子定数cの長さ。
- type c:
float
- param alpha:
b軸とc軸の間の角度(度数)。
- type alpha:
float
- param beta:
a軸とc軸の間の角度(度数)。
- type beta:
float
- param gamma:
a軸とb軸の間の角度(度数)。
- type gamma:
float
- param elev:
3Dビューの仰角(度数)。デフォルトは5.90。
- type elev:
float
- param azim:
3Dビューの方位角(度数)。デフォルトは-67.55。
- type azim:
float
- param fontsize:
ラベルのフォントサイズ。デフォルトは24。
- type fontsize:
int
- param color:
ベクトルの色。デフォルトは 'blue'。
- type color:
str
- 戻り値:
- returns:
なし(グラフを表示し、PNGとして保存します)
- rtype:
None
- crystal.draw_unit_cell.draw_vector(ax, vec, color, label, fontsize)
- 概要:
3D空間にベクトルと対応するラベルを描画します。
- 詳細説明:
Arrow3D クラスを利用して、原点から指定されたベクトルまでの矢印を描画し、 ベクトルの先端にラベルを配置します。
- 引数:
- param ax:
3DプロットのAxesオブジェクト。
- type ax:
matplotlib.axes.Axes
- param vec:
描画するベクトルの3D座標([x, y, z])。
- type vec:
numpy.ndarray
- param color:
矢印とラベルの色。
- type color:
str
- param label:
ベクトルに付けるラベル。
- type label:
str
- param fontsize:
ラベルのフォントサイズ。
- type fontsize:
int
- 戻り値:
- returns:
なし
- rtype:
None
- crystal.draw_unit_cell.lattice_vectors(a, b, c, alpha, beta, gamma)
- 概要:
格子定数と角度から基本格子ベクトルを計算します。
- 詳細説明:
結晶学で用いられる格子定数 (a, b, c) と軸間角 (alpha, beta, gamma) を用いて、 直交座標系における3つの基本格子ベクトル (va, vb, vc) を計算します。
- 引数:
- param a:
格子定数aの長さ。
- type a:
float
- param b:
格子定数bの長さ。
- type b:
float
- param c:
格子定数cの長さ。
- type c:
float
- param alpha:
b軸とc軸の間の角度(度数)。
- type alpha:
float
- param beta:
a軸とc軸の間の角度(度数)。
- type beta:
float
- param gamma:
a軸とb軸の間の角度(度数)。
- type gamma:
float
- 戻り値:
- returns:
3つの基本格子ベクトル (va, vb, vc)。各ベクトルは [x, y, z] の形式の numpy.ndarray。
- rtype:
tuple[numpy.ndarray, numpy.ndarray, numpy.ndarray]
- crystal.draw_unit_cell.main()
- 概要:
メインの実行ルーチン。特定の格子定数で単位格子を描画します。
- crystal.draw_unit_cell.set_equal_aspect(ax, points)
- 概要:
3Dプロットのアスペクト比を均等に設定し、描画範囲を調整します。
- 詳細説明:
描画される点の最大・最小座標に基づいて、X, Y, Z軸の表示範囲を同じにします。
- 引数:
- param ax:
3DプロットのAxesオブジェクト。
- type ax:
matplotlib.axes.Axes
- param points:
描画される全ての点のNumpy配列。形状は (N, 3)。
- type points:
numpy.ndarray
- 戻り値:
- returns:
なし
- rtype:
None