/ / Gráfico de contorno polar en Matplotlib - python, matplotlib, gráficas

Diagrama de contorno polar en Matplotlib - python, matplotlib, gráficos

Tengo un conjunto de datos que quiero usar para producir un diagrama de contorno en coordenadas polares usando Matplotlib.

Mis datos son los siguientes:

  • theta - 1D matriz de valores de ángulo
  • radius - 1D matriz de valores de radio
  • value - 1D matriz de valores que quiero usar para los contornos

Estas son todas las matrices 1D que se alinean correctamente, por ejemplo:

theta   radius   value
30      1        2.9
30      2        5.3
35      5        9.2

Es decir, todos los valores se repiten suficientes veces para que cada fila de esta "tabla" de tres variables defina un punto.

¿Cómo puedo crear un diagrama de contorno polar a partir de estos¿valores? He pensado convertir los valores de radio y theta en valores x e y y hacerlo en coordenadas cartesianas, pero la función de contorno parece requerir matrices 2D, y no puedo entender por qué.

¿Algunas ideas?

Respuestas

8 para la respuesta № 1

Matplotlib "s contour() La función espera que los datos se organicen como una cuadrícula 2Dde puntos y la cuadrícula de valores correspondiente para cada uno de esos puntos de cuadrícula. Si sus datos están dispuestos naturalmente en una cuadrícula, puede convertir r, theta a x, y usar contour(r*np.cos(theta), r*np.sin(theta), values) para hacer tu trama.

Si sus datos no están cuadriculados naturalmente, debe seguir los consejos de Stephen y utilizar griddata() para interpolar sus datos en una cuadrícula.

El siguiente script muestra ejemplos de ambos.

import pylab as plt
from matplotlib.mlab import griddata
import numpy as np

# data on a grid
r = np.linspace(0, 1, 100)
t = np.linspace(0, 2*np.pi, 100)
r, t = np.meshgrid(r, t)
z = (t-np.pi)**2 + 10*(r-0.5)**2

plt.subplot(121)
plt.contour(r*np.cos(t), r*np.sin(t), z)

# ungrid data, then re-grid it
r = r.flatten()
t = t.flatten()
x = r*np.cos(t)
y = r*np.sin(t)
z = z.flatten()
xgrid = np.linspace(x.min(), x.max(), 100)
ygrid = np.linspace(y.min(), y.max(), 100)
xgrid, ygrid = np.meshgrid(xgrid, ygrid)
zgrid = griddata(x,y,z, xgrid, ygrid)

plt.subplot(122)
plt.contour(xgrid, ygrid, zgrid)

plt.show()

enter image description here


3 para la respuesta № 2

No sé si es posible hacer un diagrama de contorno polar directamente, pero si convierte a coordenadas cartesianas puede usar el griddata función para convertir sus matrices 1D a 2D.