2014-10-27 2 views
5

У меня следующая проблема: я хочу, чтобы построить несколько точек данных в полярных координатах в питоне, который легко, используя код, какКак построить диаграммы ошибок в полярных координатах в python?

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

, но я хочу, чтобы добавить бруски ошибок, и я не нахожу достаточное решение. Есть ли уже готовый matplotlib-код? Или кто-нибудь знает, как правильно определить столбцы ошибок? Как я понимаю, r-ошибка - это просто прямая линия, а theta-error - сегмент круга.

ответ

2

Об ограничении ошибки в барах - это то, что колпачки нарисованы с коллекциями hline и vline, поэтому колпачки неправильно вращаются в полярных координатах (для этого есть проблема, https://github.com/matplotlib/matplotlib/issues/441). Приближенный обходной путь, чтобы просто сделать крышки имеют нулевой размер:

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

polar plot with error bars

Если вы хотите бруски ошибки тета, чтобы быть круглым вам придется осуществить это себя. Самый простой способ

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

Для небольших ошибок это не будет реально изменить ситуацию, но будет иметь значение для больших ошибок.

+0

Спасибо, это именно то, что я искал! – Madao

0

я бы рекомендовал что-то вроде этого:

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

Но seeems быть какая-то проблема. Я не знаю, присуще ли это pylab. Вид в убытке относительно того, что делать :)

Смежные вопросы