Próbuję utworzyć trójwymiarowy wykres powierzchni dla wyrażenia: z = y^2/x, dla x w przedziale [-2,2] iy w przedziale [-1.1,4.4]. Chcę również, aby wartości z z zakresu od -4 do 4.Python/matplotlib mplot3d- jak ustawić maksymalną wartość dla osi Z?
Problem polega na tym, że gdy oglądam gotowy surfaceplot, wartości osi Z nie zatrzymują się na [-4,4].
Moje pytanie brzmi: jak mogę "usunąć" wartość osi z, która znajduje się poza intervall [-4,4] z gotowego wykresu?
Mój kod to:
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()
Czy nie ma lepszego sposobu, to zrobić? Aby jakoś "odciąć" wartości z poza zakresem [-4,4] podczas przeglądania wykresu? – user605243
@ user605243: w zasadzie powinieneś być w stanie użyć masked_array, jak możesz z wykresami 2D. W praktyce wygląda na to, że nie działa (chociaż niezbędne zmiany w axes3d.py powodują, że nie wydaje się to zbyt trudne). Niestety, nie mogłem tak naprawdę uzyskać sztuczki np.nan, z mnóstwem " CGPathCloseSubpath: brak bieżącego punktu. " błędy. – DSM