如何使我的3D matplotlib图看起来好看?

时间:2019-07-07 06:15:28

标签: python matplotlib 3d

我正在尝试绘制一个指标函数,该指标函数具有2个输入变量(在本例中为圆形),该变量与某个平面相交。交点给出一些具有1个输入变量的分段常数函数。我的问题是,我的3D表面图看起来不太好。我希望剧情有

  
      
  1. 直接位于圆的边缘上的点(x,y)也被表面覆盖,但是由于在z方向上的跳跃,颜色混合了。也许没有颜色看起来会更好。我想必须为此拆分数据,但是我没有以正确的方式做到这一点。
  2.   
  3. 我希望以某种方式突出显示3D曲线和超平面的交点。
  4.   

以下代码显示了我目前的工作:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

import numpy as np

def circ(x, y, mid = (0.5, 0.5), rad = 0.5):
    out = np.zeros(len(x))
    for i in range(len(x)):
            c = np.sqrt((x[i] - mid[0])**2+(y[i] - mid[1])**2)
            if(c < rad):
                out[i] = 1
    return out

x = np.linspace(-.2,1.2, 100)
y = np.linspace(-.2,1.2, 100)
z = np.linspace(0,1.01, 100)


X, Y = np.meshgrid(x, y)
Xp, Zp = np.meshgrid(x, z)
P = - Xp +1
zs = circ(np.ravel(X), np.ravel(Y))
Z = np.reshape(zs, np.shape(X))

fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap='Wistia', alpha = .7)
ax.plot_surface(Xp, P, Zp, color = 'blue', alpha = 1.)

ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
ax.view_init(40, 35)

结果图:

The resulting plot

如您所见,我已经有了一个“好的”解决方案。我的主要目标是实现上述两点。我也尝试使用图的alpha值,但是即使将平面图设置为1,它仍然是透明的。 非常感谢您对此图提出的任何建议,包括颜色方案,角度等。

0 个答案:

没有答案