Polar Działki z magnetycznym czasu lokalnego (0-23) jako azymut przeciwko szerokości magnetycznego (90-0) jako promień

głosy
0

Mam stara się wykreślić wykres polarny użyciu matplotlib w python, ale ma pewne problemy. Zamiast normalnych 0-360 stopni, chcę umieścić czas, 0-23hrs i promień będzie w stopniach szerokości czyli od 90-0 (bieguna do równika).

Próbowałem zmienić niektóre ustawienia w matplotlib występy polar.pyprzykład, ale wynik nie jest inna. To jest to, co mam:

polarplot

Utwórz 17/03/2016 o 11:10
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

Jeśli jesteś ostrożny, można rozważyć odwracanie swoich szerokościach geograficznych i ręcznie zmieniając etykiet podziałki na obu osiach.

Oto przykład, w jaki sposób można to osiągnąć, więcej wyjaśnień, komentarzy:

import numpy as np
from matplotlib import pyplot as plt

# set up random data between 0 and 90
r = [np.random.random() * 90.0 for i in range(0,10)]

# set up 24 hours matching the random data above
hours = np.linspace(0.0,24.0,len(r))
# scaling the 24 hours to the full circle, 2pi
theta = hours / 24.0 * (2.0 * np.pi)

# reverse your data, so that 90 becomes 0:
r_rev = [(ri - 90.0) * -1.0 for ri in r]

# set up your polar plot
ax = plt.subplot(111, projection='polar')
ax.plot(theta, r_rev, color='r', linewidth=3)

# define your axis limits
ax.set_ylim([0.0, 90.0])

# statically reverse your y-tick-labels
# caution: this turns your labels into strings
#          and decouples them from the data
# 
# the np.linspace gives you a distribution between 90 and 0 -
# the number of increments are related to the number of ticks
# however, you require one more label, because the center is 
#     omitted.  
ax.set_yticklabels(['{:.0f}'.format(ylabel) \
                for ylabel in np.linspace(90.0,0.0,len(ax.get_yticklabels())+1)[1:]])


# statically turn your x-tick-labels into fractions of 24
# caution: this turns your labels into strings
#          and decouples them from the data
#
# the number of ticks around the polar plot is used to derive
#    the appropriate increment for the 24 hours
ax.set_xticklabels(['{:.1f}'.format(xlabel) \
                    for xlabel in np.arange(0.0,24.0,(24.0 / len(ax.get_xticklabels())))])

ax.grid(True)

plt.show()

Twój wynik będzie wyglądać następująco (pamiętając, że losowe dane będą się różnić):

Nowe etykiety osi


aby zobaczyć, że to rzeczywiście działa, można zastąpić losowe rz tej linii:

r = np.linspace(0,90,10)

Teraz wiesz r-values i można zobaczyć, jak one są odwrócone.

Odpowiedział 20/03/2016 o 16:22
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more