Масштабированная карта цветов лица с помощью mplot3d

У меня есть простая задача, которая должна иметь простое решение, но я пытаюсь ее решить уже несколько дней. Я стараюсь быть конкретным.

  • Я пытаюсь построить поверхность, используя mplot3d от matplotlib и поверхность _. Когда я рисую поверхность набора данных «z» и пытаюсь масштабировать цветовую карту до определенного максимального значения, я изменяю свойство «vmax» на это значение. Это прекрасно работает.

  • Когда я пытаюсь построить поверхность одного набора данных (z )и использовать цвета лиц второго набора данных (fc ), это также работает нормально.

  • Когда я хочу масштабировать палитру цветов лица, свойство vmax отменяется значениями цвета лица. Таким образом, Vmax не имеет никакого эффекта (попытка1 ). Линии тоже исчезли, но это уже другой вопрос.

  • Также попытка изменить значения набора данных цвета лица (fc )не дала желаемого эффекта (попытка2 ).

Я пытаюсь получить фигуру с масштабированной картой цветов (, как на фигуре, «масштабированной» ниже ), но масштабированной по цветам лица, а не значениям z -.

Приведенный ниже код — это то, что у меня есть сейчас, и результаты выглядят так:

enter image description here

Кто-нибудь знает, что мне здесь не хватает? Любые мысли приветствуются!

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)')
6
задан Hooked 13 July 2012 в 19:03
поделиться