Mam proste zadanie, które powinno mieć proste rozwiązanie, ale próbuję od wielu dni. Staram się być konkretny.Skalowana colormap facecolors z mplot3d
próbuję działki powierzchnię używając mplot3d matplotlib i plot_surface. Kiedy wykreślam powierzchnię zestawu danych "z" i próbuję skalować mapę kolorów do określonej wartości maksymalnej, zmieniam właściwość "vmax" na tę wartość. To działa świetnie.
Kiedy próbuję wykreślić powierzchnię jednego zestawu danych (z) i użyć kolorów drugiego zestawu danych (fc), działa to również poprawnie.
Kiedy chcę przeskalować mapę kolorów elementów opcjonalnych, właściwość vmax jest nadpisywana wartościami kolorów. Vmax nie ma zatem żadnego efektu (próba1). Linie również zniknęły, ale to kolejna kwestia.
Również próby zmiany wartości zestawu danych facecolor (fc) nie przyniosły pożądanego efektu (próba2).
staram się uzyskać postać z skalowany colormap (jak na rysunku „przeskalowany” poniżej), ale skalowany do facecolors, a nie z-wartości.
Poniższy kod jest co mam teraz, a wyniki wyglądają następująco:
Czy ktoś wie, co ja tu brakuje? Wszelkie przemyślenia są doceniane!
import pylab as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
plt.ion()
# creating dataset
profile = np.arange(20)**2
z = profile.repeat(20).reshape(20,20)
fc= np.rot90(z.copy())
x = np.arange(z.shape[0])
y = np.arange(z.shape[1])
X, Y = np.meshgrid(x,y)
# plotting
vmax = 100
fig = plt.figure()
ax = fig.add_subplot(1,4,1, projection='3d', azim=210)
ax.plot_surface(X,Y,z, cmap=plt.cm.jet, cstride=1, rstride=1)
ax.set_title('normal')
ax = fig.add_subplot(1,4,2, projection='3d', azim=210)
ax.plot_surface(X,Y,z, cmap=plt.cm.jet, cstride=1, rstride=1, vmax=vmax)
ax.set_title('scaled')
ax = fig.add_subplot(1,4,3, projection='3d', azim=210)
ax.plot_surface(X,Y,z, facecolors=plt.cm.jet(fc), cstride=1, rstride=1, vmax=vmax)
ax.set_title('rotated (attempt1)')
ax = fig.add_subplot(1,4,4, projection='3d', azim=210)
fc[fc> vmax] = vmax
ax.plot_surface(X,Y,z, facecolors=plt.cm.jet(fc), cstride=1, rstride=1)
ax.set_title('rotated (attempt2)')
Czy dowiedziałeś się, jak odzyskać czarne linie? Myślę, że mam ten sam problem: http://stackoverflow.com/questions/12355410/fine-tuning-a-surf-plot-using-mplot3d i staram się pokazać linie. – Dan
Widzę, że twój problem został rozwiązany, świetnie :-) – Niels