2012-08-22 41 views
5

Estoy trazando una curva de acimut-elevación en una gráfica polar donde la elevación es la componente radial. Por defecto, Matplotlib traza el valor radial de 0 en el centro a 90 en el perímetro. Quiero invertir eso, así que 90 grados está en el centro. Intenté establecer los límites con una llamada a ax.set_ylim (90,0), pero esto da como resultado una excepción LinAlgError lanzada. ax es el objeto de ejes obtenido de una llamada a add_axes.Establecer el eje radial en los trazados polares de Matplotlib

¿Se puede hacer esto y, de ser así, qué debo hacer?

Editar: Esto es lo que estoy usando ahora. El código de trazado básico fue tomado de uno de los ejemplos matplotlib

# radar green, solid grid lines 
rc('grid', color='#316931', linewidth=1, linestyle='-') 
rc('xtick', labelsize=10) 
rc('ytick', labelsize=10) 

# force square figure and square axes looks better for polar, IMO 
width, height = matplotlib.rcParams['figure.figsize'] 
size = min(width, height) 
# make a square figure 
fig = figure(figsize=(size, size)) 
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], projection='polar', axisbg='#d5de9c') 

# Adjust radius so it goes 90 at the center to 0 at the perimeter (doesn't work) 
#ax.set_ylim(90, 0) 

# Rotate plot so 0 degrees is due north, 180 is due south 

ax.set_theta_zero_location("N") 

obs.date = datetime.datetime.utcnow() 
az,el = azel_calc(obs, ephem.Sun()) 
ax.plot(az, el, color='#ee8d18', lw=3) 
obs.date = datetime.datetime.utcnow() 
az,el = azel_calc(obs, ephem.Moon()) 
ax.plot(az, el, color='#bf7033', lw=3) 

ax.set_rmax(90.) 
grid(True) 

ax.set_title("Solar Az-El Plot", fontsize=10) 
show() 

la trama que resulta de esto es

enter image description here

+0

¿Qué código ya tiene? Eso puede ser de gran ayuda para responder su pregunta (en particular, la segunda parte). – Evert

+0

Imagino que se puede hacer con una función de mapeo que invierta las coordenadas radiales y establezca manualmente las etiquetas radiales. ¿Es esto suficiente o realmente quieres redefinir el eje radial? –

Respuesta

3

I logró poner él eje radial invertida. Tenía que volver a asignar el radio, con el fin de que coincida con el nuevo eje:

fig = figure() 
ax = fig.add_subplot(1, 1, 1, polar=True) 

def mapr(r): 
    """Remap the radial axis.""" 
    return 90 - r 

r = np.arange(0, 90, 0.01) 
theta = 2 * np.pi * r/90 

ax.plot(theta, mapr(r)) 
ax.set_yticks(range(0, 90, 10))     # Define the yticks 
ax.set_yticklabels(map(str, range(90, 0, -10))) # Change the labels 

Tenga en cuenta que es sólo un truco, el eje está todavía con el 0 en el centro y 90 en el perímetro. Tendrá que usar la función de mapeo para todas las variables que está trazando.

Cuestiones relacionadas