matplotlib: atribui cor a um raio

Eu tenho uma plotagem 3D de um disco. Agora eu gostaria de plotar a superfície em cores, dependendo dos valores armazenados em uma matriz. Por exemplo. o raio do disco é de 300 mm. A matriz pode gostar:

arr = np.array([[ 114.28, 14],
                [ 128.57, 16],
                [ 142.85,19],
                [ 157.13,20],
                [ 171.41,21],
                [ 185.69,22],
                [ 199.97,24],
                [ 214.25,27],
                [ 228.53,29],
                [ 242.81,30],
                [ 257.09,31],
                [ 271.37,34],
                [ 288.65,35],
                [ 299.93,36],
                [ 300,38]])

Isso significa que para raio = 114,28, tenho o valor 14. Gostaria de plotar um círculo no raio 114,28 em uma cor (por exemplo, azul). O segundo raio é 128,57. Para o raio 128,57, o valor 16 é atribuído. Isso significa que eu gostaria de plotar um círculo em outra cor, p. laranja na superfície da plotagem e assim por diante.

Tentei resolver esse problema com o contorno (graças a bazingaa). Parece exatamente como eu quero. Infelizmente, acabei de perceber que essa não é realmente a solução para o meu problema. Talvez eu deva explicar o que estou tentando alcançar. Quero mostrar como certos parâmetros, como velocidade, são distribuídos ao longo do disco. Nesse caso, o gráfico de contorno também seria corrigido, à medida que a velocidade aumentasse para o exterior. Mas também pode acontecer que sejam visualizados parâmetros que nem sempre aumentam continuamente para o exterior. Tentei esse cenário e simplesmente tornei um valor no meio da matriz menor que o valor anterior (alterei o valor 27 para 14 de arr) e nada acontece no gráfico de contorno, exceto que a legenda muda. Talvez o contorno não seja a abordagem correta, afinal? Talvez eu tenha que desenhar círculos individuais e atribuir cores a eles e interpolar entre os círculos para preencher as lacunas.

import numpy as np
import matplotlib as mlp
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d

ri = 100
ra = 300
h=20

# input xy coordinates
xy = np.array([[ri,0],[ra,0],[ra,h],[ri,h],[ri,0]])
# radial component is x values of input
r = xy[:,0]
# angular component is one revolution of 30 steps
phi = np.linspace(0, 2*np.pi, 2000)
# create grid
R,Phi = np.meshgrid(r,phi)
# transform to cartesian coordinates
X = R*np.cos(Phi)
Y = R*np.sin(Phi)
# Z values are y values, repeated 30 times
Z = np.tile(xy[:,1],len(Y)).reshape(Y.shape)


fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')

ax.set_zlim(0,200)
ax.plot_surface(X, Y, Z, alpha=0.5, color='lightgrey', rstride=1, cstride=1)

plt.contourf(X, Y, np.sqrt(X ** 2 + Y ** 2), zdir='z', offset=20, 
             cmap=plt.cm.rainbow)
cbar = plt.colorbar() 
arr = np.array([[ 114.28, 14],
                [ 128.57, 16],
                [ 142.85,19],
                [ 157.13,20],
                [ 171.41,21],
                [ 185.69,22],
                [ 199.97,24],
                [ 214.25,27],
                [ 228.53,29],
                [ 242.81,30],
                [ 257.09,31],
                [ 271.37,34],
                [ 288.65,35],
                [ 299.93,36],
                [ 300,38]])
cbar.ax.set_yticklabels(arr[:,1])

plt.show()

Espero que alguém possa ajudar, é muito importante para mim. Cumprimentos !

questionAnswers(1)

yourAnswerToTheQuestion