¿Cómo trazar barras de error en coordenadas polares en python?

Tengo el siguiente problema: quiero trazar algunos puntos de datos en coordenadas polares en python, lo cual es fácil, usando algún código como

import numpy as np import matplotlib.pyplot as plt r = 1e04 * np.array([5.31,5.29,5.25,5.19,5.09,4.92,4.67,4.27,3.75,3.56]) theta = 2*np.pi/360 * np.array(list(range(0, 100, 10))) plt.polar(theta, r, "ro") plt.show() 

pero quiero agregar barras de error y no encuentro ninguna solución suficiente. ¿Ya hay algún código matplotlib prebuild? ¿O alguien sabe cómo definir correctamente las barras de error? Como lo entiendo, el error r es solo una línea recta, mientras que el error theta debería ser un segmento de un círculo.

La limitación de la barra de errores es que las mayúsculas se dibujan con hline y vline colecciones para que las mayúsculas no giren correctamente en coordenadas polares (hay un problema abierto para esto, https://github.com/matplotlib/matplotlib/issues/441 ) . Una solución aproximada es hacer que los límites tengan un tamaño cero:

 import numpy as np import pylab as plt fig = plt.figure() ax = plt.axes(polar=True) r = np.array([5.31,5.29,5.25,5.19,5.09,4.92,4.67,4.27,3.75,3.56]) theta = 2*np.pi/360 * np.array(list(range(0, 100, 10))) ax.plot(theta, r, "ro") ax.errorbar(theta, r, yerr=1, xerr=.1, capsize=0) plt.show() 

parcela polar con barras de error

Si desea que las barras de error de theta sean circulares, tendrá que implementarlo usted mismo. La forma más fácil es

 th_err = 1 for th, _r in zip(theta, r): local_theta = np.linspace(-th_err, th_err, 15) + th local_r = np.ones(15) * _r ax.plot(local_theta, local_r, color='k', marker='') plt.show() 

Para errores pequeños, esto realmente no hará una diferencia, pero importará para errores grandes.

Habría recomendado algo como esto:

 import numpy as np import pylab as plt fig = plt.figure() ax = plt.axes(polar=True) r = 1e04 * np.array([5.31,5.29,5.25,5.19,5.09,4.92,4.67,4.27,3.75,3.56]) theta = 2*np.pi/360 * np.array(list(range(0, 100, 10))) ax.plot(theta, r, "ro") ax.errorbar(theta, r, xerr=0.5, yerr=0.4) plt.show() 

Pero parece que hay algún problema. No sé si es inherente a pylab . Un poco perdido en cuanto a qué hacer 🙂