我正在尝试为表达式绘制一个三维曲面图:z = y^2/x,对于区间[-2,2]中的x和区间[-1]中的y。我还希望z值的范围从-4到4。
问题是,当我查看完成的曲面图时,z轴值不会停止在[-4,4]。
因此,我的问题是如何从完成的图中“删除”区间[-4,4]之外的z轴值?
我的代码是:
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection="3d")
x = np.arange(-2.0,2.0,0.1,float) # x in interval [-2,2]
y = np.arange(-1.4,1.4,0.1,float) # y in interval [-1.4,1.4]
x,y = np.meshgrid(x,y)
z = (y**2/x) # z = y^2/x
ax.plot_surface(x, y, z,rstride=1, cstride=1, linewidth=0.25)
ax.set_zlim3d(-4, 4) # viewrange for z-axis should be [-4,4]
ax.set_ylim3d(-2, 2) # viewrange for y-axis should be [-2,2]
ax.set_xlim3d(-2, 2) # viewrange for x-axis should be [-2,2]
plt.show()
3条答案
按热度按时间zzwlnbp81#
我也有同样的问题,仍然没有找到比裁剪我的数据更好的东西。不幸的是,在我的情况下,我绑定到matplotlib 1。2.1.但万一你可以升级到版本1.3.0你可以有一个解决方案:似乎有一堆与轴范围相关的新API。特别是,您可能对“set_zlim”感兴趣。
编辑1:管理迁移我的环境使用matplotlib 1.3.0; set_zlim工作起来很有魅力:)
下面的代码对我有效(顺便说一下,我在OSX上运行这个,我不确定这有什么影响?)):
iswrvxsc2#
裁剪你的数据可以完成这一点,但它不是很漂亮。
wf82jlnq3#
与使用
ax.plot_surface
相比,我发现ax.plot_trisurf
工作得很好,因为您不需要像ax.plot_surface
那样为它提供一个矩形网格。如果你使用numpy数组,你可以使用下面的技巧来只选择z边界内的点。