3次元空間で不等式条件を満たす領域を,格子点を使って描画したい.MATLAB Answers の回答を参考にして作ったソースコードと出力したグラフをここに示す.
#ソースコード
test.py
#!/usr/bin/env python3
-- coding: utf-8 --
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as cl
#各軸の格子座標の作成
x = np.arange(-5,5,0.2)
y = np.arange(-5,5,0.2)
z = np.arange(0,5,0.2)
#格子座標(点)の作成
xx, yy, zz = np.meshgrid(x,y,z)
#不等式条件の指定し、各格子座標が条件を満たすかを確認する.
c1 = np.sqrt(pow(xx-1,2)+pow(yy-2,2))<1
c2 = zz<xx+yy
c3 = 1<zz
#全ての不等式条件を満たす格子座標のインデックスを取得
idx=c1&c2&c3
#3次元のグラフの作成
fig = plt.figure()
ax = Axes3D(fig)
#不等式条件を満たす格子点のみを描画
ax.scatter(xx[idx],yy[idx],zz[idx],'o',edgecolors='k',depthshade=True)
ax.set_aspect('equal') #X-Y平面のみ軸のアスペクト比を等倍にする。
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.tick_params(labelsize=6)
ax.view_init(15,-102)
plt.show()
#出力結果
![Figure_1.jpeg](https://qiita-image-store.s3.amazonaws.com/0/241729/1a7ea95e-c469-08f4-9f91-d0b22d134345.jpeg)
各格子点のマーカーの色を奥行に応じて濃淡を変えるために,scatter関数の引数で「depthshade=True」と明示しているが,実際はデフォルトで指定されている.マーカーの色には濃淡がついているものの,境界を描画していないので少々分かりにくい.