xticks xlabel polar font python numpy matplotlib plot

xlabel - polar plot python



¿Cómo hacer que los ángulos en una trama polar matplotlib vayan en sentido horario con 0 ° en la parte superior? (5)

Actualizando esta pregunta, en Matplotlib 1.1, ahora hay dos métodos en PolarAxes para establecer la dirección theta (CW / CCW) y la ubicación para theta = 0.

Consulte http://matplotlib.sourceforge.net/devel/add_new_projection.html#matplotlib.projections.polar.PolarAxes

Específicamente, vea set_theta_direction() y set_theta_offset() .

Parece que mucha gente intenta hacer complots tipo brújula.

Estoy usando matplotlib y numpy para hacer una trama polar. Aquí hay un código de muestra:

import numpy as N import matplotlib.pyplot as P angle = N.arange(0, 360, 10, dtype=float) * N.pi / 180.0 arbitrary_data = N.abs(N.sin(angle)) + 0.1 * (N.random.random_sample(size=angle.shape) - 0.5) P.clf() P.polar(angle, arbitrary_data) P.show()

Notará que 0 ° es a las 3 en punto en la trama, y ​​los ángulos van en sentido antihorario. Sería más útil para mis propósitos de visualización de datos tener 0 ° a las 12 en punto y tener los ángulos en el sentido de las agujas del reloj. ¿Hay alguna manera de hacer esto además de rotar los datos y cambiar manualmente las etiquetas de los ejes?


Ambas rutinas invertidas deberían usar la ruta completa a las transformadas:

return NorthPolarAxes.InvertedNorthPolarTransform()

y

return NorthPolarAxes.NorthPolarTransform()

Ahora, las subclases creadas automáticamente de NorthPolarAxes como NorthPolarAxesSubplot pueden acceder a las funciones de transformación.

Espero que esto ayude.


Lo descubrí: matplotlib te permite crear proyecciones personalizadas. PolarAxes uno que hereda de PolarAxes .

import numpy as N import matplotlib.pyplot as P from matplotlib.projections import PolarAxes, register_projection from matplotlib.transforms import Affine2D, Bbox, IdentityTransform class NorthPolarAxes(PolarAxes): '''''' A variant of PolarAxes where theta starts pointing north and goes clockwise. '''''' name = ''northpolar'' class NorthPolarTransform(PolarAxes.PolarTransform): def transform(self, tr): xy = N.zeros(tr.shape, N.float_) t = tr[:, 0:1] r = tr[:, 1:2] x = xy[:, 0:1] y = xy[:, 1:2] x[:] = r * N.sin(t) y[:] = r * N.cos(t) return xy transform_non_affine = transform def inverted(self): return NorthPolarAxes.InvertedNorthPolarTransform() class InvertedNorthPolarTransform(PolarAxes.InvertedPolarTransform): def transform(self, xy): x = xy[:, 0:1] y = xy[:, 1:] r = N.sqrt(x*x + y*y) theta = N.arctan2(y, x) return N.concatenate((theta, r), 1) def inverted(self): return NorthPolarAxes.NorthPolarTransform() def _set_lim_and_transforms(self): PolarAxes._set_lim_and_transforms(self) self.transProjection = self.NorthPolarTransform() self.transData = ( self.transScale + self.transProjection + (self.transProjectionAffine + self.transAxes)) self._xaxis_transform = ( self.transProjection + self.PolarAffine(IdentityTransform(), Bbox.unit()) + self.transAxes) self._xaxis_text1_transform = ( self._theta_label1_position + self._xaxis_transform) self._yaxis_transform = ( Affine2D().scale(N.pi * 2.0, 1.0) + self.transData) self._yaxis_text1_transform = ( self._r_label1_position + Affine2D().scale(1.0 / 360.0, 1.0) + self._yaxis_transform) register_projection(NorthPolarAxes) angle = N.arange(0, 360, 10, dtype=float) * N.pi / 180.0 arbitrary_data = (N.abs(N.sin(angle)) + 0.1 * (N.random.random_sample(size=angle.shape) - 0.5)) P.clf() P.subplot(1, 1, 1, projection=''northpolar'') P.plot(angle, arbitrary_data) P.show()


Para expandir la respuesta de klimaat con un ejemplo:

import math angle=[0.,5.,10.,15.,20.,25.,30.,35.,40.,45.,50.,55.,60.,65.,70.,75.,/ 80.,85.,90.,95.,100.,105.,110.,115.,120.,125.] angle = [math.radians(a) for a in angle] lux=[12.67,12.97,12.49,14.58,12.46,12.59,11.26,10.71,17.74,25.95,/ 15.07,7.43,6.30,6.39,7.70,9.19,11.30,13.30,14.07,15.92,14.70,/ 10.70,6.27,2.69,1.29,0.81] import matplotlib.pyplot as P import matplotlib P.clf() sp = P.subplot(1, 1, 1, projection=''polar'') sp.set_theta_zero_location(''N'') sp.set_theta_direction(-1) P.plot(angle, lux) P.show()


Puede modificar su matplotlib / projections / polar.py.

En donde dice:

def transform(self, tr): xy = npy.zeros(tr.shape, npy.float_) t = tr[:, 0:1] r = tr[:, 1:2] x = xy[:, 0:1] y = xy[:, 1:2] x[:] = r * npy.cos(t) y[:] = r * npy.sin(t) return xy

Hazlo decir:

def transform(self, tr): xy = npy.zeros(tr.shape, npy.float_) t = tr[:, 0:1] r = tr[:, 1:2] x = xy[:, 0:1] y = xy[:, 1:2] x[:] = - r * npy.sin(t) y[:] = r * npy.cos(t) return xy

En realidad, no lo intenté, es posible que deba ajustar las asignaciones x [:] e y [:] a su gusto. Este cambio afectará a todos los programas que usan matplotlib polar plot.