matplotlib: asignar color a un radio

Tengo un diagrama 3D de un disco. Ahora me gustaría trazar la superficie en color según los valores almacenados en una matriz. P.ej. El radio del disco es de 300 mm. El conjunto podría gustar:

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]])

Significa para radio = 114.28 Tengo el valor 14. Me gustaría trazar un círculo con radio 114.28 en un color (por ejemplo, azul). El segundo radio es 128.57. Para el radio 128.57 se asigna el valor 16. Eso significa que me gustaría trazar un círculo en otro color, p. naranja en la superficie de la trama y así sucesivamente.

Intenté resolver este problema con el diagrama de contorno (gracias a bazingaa). Se ve exactamente como lo quiero. Desafortunadamente, me di cuenta de que esta no es realmente la solución a mi problema. Tal vez debería explicar lo que estoy tratando de lograr. Quiero mostrar cómo ciertos parámetros, como la velocidad, se distribuyen a lo largo del disco. En este caso, el diagrama de contorno también se corregiría, ya que la velocidad aumenta hacia el exterior. Pero también puede suceder que se tengan que visualizar parámetros que no siempre aumentan continuamente hacia el exterior. Probé este escenario y simplemente hice un valor en el centro de la matriz más pequeño que el valor anterior (cambié el valor 27 a 14 de arr) y no sucede nada en el diagrama de contorno, excepto que la leyenda cambia. ¿Quizás el diagrama de contorno no es el enfoque correcto después de todo? Tal vez tenga que dibujar círculos individuales y asignarles colores e interpolarlos entre los círculos para llenar los huecos.

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 alguien pueda ayudar, es muy importante para mí. Atentamente

Respuestas a la pregunta(1)

Su respuesta a la pregunta