Tôi đang cố tạo một ô bề mặt 3 chiều cho biểu thức: z = y^2/x, với x trong khoảng [-2,2] và y trong khoảng [-1,4,1,4]. Tôi cũng muốn các giá trị z nằm trong khoảng từ -4 đến 4.Python/matplotlib mplot3d- làm cách nào để đặt giá trị tối đa cho trục z?
Vấn đề là khi tôi xem surfaceplot hoàn thành, giá trị trục z không dừng ở [-4,4].
Vì vậy, câu hỏi của tôi là làm thế nào tôi có thể "loại bỏ" giá trị z-trục nằm ngoài phạm vi intervall [-4,4] từ cốt truyện đã hoàn thành?
Mã của tôi là:
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()
Có không có cách nào tốt hơn để làm điều này? Bằng cách nào đó "cắt" đi các giá trị z bên ngoài phạm vi [-4,4] khi xem cốt truyện? – user605243
@ user605243: về nguyên tắc, bạn sẽ có thể sử dụng masked_array, như bạn có thể làm với các ô 2D. Trong thực tế nó không có vẻ làm việc (mặc dù những thay đổi cần thiết trong axes3d.py để làm cho nó không có vẻ _too_ daunting.) Thật không may tôi thực sự không thể có được np.nan lừa để làm việc, hoặc, với rất nhiều " CGPathCloseSubpath: không có điểm hiện tại. " lỗi. – DSM