2016-06-29 73 views
0

我正在嘗試製作以不同區域以不同方式定義的表面的3D繪圖。例如,如果x> y,則定義爲1,如果x < = y,則定義爲x^2。分段定義表面的Python繪圖

我用邏輯運算符定義了f,並試圖用「plot_surface」函數繪製它,並在網格中對它進行評估。不幸的是,我得到一個錯誤,說「具有多個元素的數組的真值是不明確的」。

你知道解決這個問題的方法嗎?發表寧靜

+0

[ValueError異常的可能重複:數組與真值不止一個元素是不明確的。使用a.any()或a.all()](http://stackoverflow.com/questions/10062954/valueerror-the-truth-value-of-an-array-with-more-than-one-element-是 - 不明確的) – m00am

+0

[分段函數與3d圖]可能的副本(http://stackoverflow.com/questions/22430429/piecewise-function-with-3d-plot) – Serenity

+0

我讀過條目,我會說具體在那裏治療的問題不能解決我的問題... – Ignatius

回答

0

從鏈接以您需要定義F使用np.piecewise

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import axes3d, Axes3D 

num_steps = 500 
x_arr = np.linspace(0,100, num_steps) 
y_arr = np.linspace(0,100, num_steps) 

def zfunc(x, y): 
    return np.piecewise(x, [x>y, x<=y], [lambda x: 1, lambda x: x**2]) 

x,y = np.meshgrid(x_arr, y_arr) 
z =zfunc(x,y) 

fig=plt.figure() 
ax=fig.add_subplot(1,1,1,projection='3d') 
ax.set_xlabel('X axis') 
ax.set_ylabel('Y axis') 

ax.plot_surface(x,y,z,cmap='viridis') #cmap to make it easier to see 
ax.view_init(30, 70) 
plt.show() 

給你這個情節: enter image description here