意味のない負の値を持つ3次元関数をプロットする必要があります(プロット内に表示しないでください)。Matplotlibは3Dプロットで負の値を無視します
xs = np.linspace(0, 3600, 1000)
ys = np.linspace(0, 3600, 1000)
zs = np.empty(shape=(1000, 1000))
for ix, x in enumerate(xs):
for iy, y in enumerate(ys):
zs[ix][iy] = constraint_function(x, y)
xs, ys = np.meshgrid(xs, ys)
機能は主に正方形の[0, 3600]x[0, 3600]
に有効な値を持っている:私は、関数に次のように計算しています
def constraint_function(x, y):
return min(
(1800 - 0.3 * x - 0.5 * y)/0.4,
(500 - 0.1 * x - 0.08 * y)/0.12,
(200 - 0.06 * x - 0.04 * y)/0.05
)
:のようにプロットすることがある機能です。私が持っていた最初のアプローチは、私のニーズに合うように軸の範囲を設定している次のプロットになり
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.azim = 20
ax.set_xlim(0, 3500)
ax.set_ylim(0, 3500)
ax.set_zlim(0, 4500)
ax.plot_surface(xs, ys, zs)
plt.show()
は:
はそれだけで制限を無視し、とにかくそれをプロットしました。それは、のこぎりのように私を残し
plt.cm.jet.set_bad(alpha=0.0)
ax.azim = 20
ax.set_xlim(0, 3500)
ax.set_ylim(0, 3500)
ax.set_zlim(0, 4500)
ax.plot_surface(xs, ys, zs)
plt.show()
def constraint_function(x, y):
temp = min(
(1800 - 0.3 * x - 0.5 * y)/0.4,
(500 - 0.1 * x - 0.08 * y)/0.12,
(200 - 0.06 * x - 0.04 * y)/0.05
)
return temp if temp >= 0 else np.nan
とゼロに無効な値のアルファを設定する:ように、第2のアプローチは、なるように機能を変更np.nan
として負の値を定義しました。私が持たないこともある国境です。プロットがマイナスになっているときに、これらのエッジを取り除き、滑らかな線を得る方法はありますか?