1

I want to plot some values representing visible satellites into a polar graph with Python and matplotlib. I have written some code following a matplotlib example, and the polar chart is represented, but given points are not plotted:

import matplotlib
from matplotlib.pyplot import figure, show, rc, grid
from math import pi

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

# 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], polar=True, axisbg='#d5de9c')

# Satellite info [PRN, E, Az, Ss, Used (1 yes, 0 no)]
sat = [ [1, 62, 255, 46, 1],
        [14, 62, 26, 46, 1],
        [31, 42, 158, 36, 1],
        [22, 40, 76, 50, 1],
        [11, 29, 308, 0, 0],
        [19, 26, 243, 36, 1],
        [3, 13, 217, 0, 0],
        [18, 10, 93, 0, 0],
        [20, 6, 291, 0, 0],
        [5, 1, 72, 0, 0],
        [122, 43, 216, 0, 0],
        [135, 47, 203, 43, 0] ]

for index in (0, len(sat)-1):
    if(sat[index][4]>0):
        ax.plot(sat[index][2], sat[index][1], color='green', marker='s', markersize=12)
    else:
        ax.plot(sat[index][2], sat[index][1], color='gray', marker='s', markersize=12)

ax.set_rmax(2.0)
grid(True)

ax.set_title("Visible satellites", fontsize=20)
show()

What am I doing wrong?

2 Answers 2

1

Its simpler to just iterate of your list of sats like this:

for s in sat:
    if(s[4]>0):
        ax.plot(s[2], s[1],color='green', marker='s', markersize=5)
    else:
        ax.plot(s[2], s[1],color='gray', marker='s', markersize=5)

In addition to that, you're also limiting the azimuth to <2 with the set_rmax, this leaves only 1 satellite visible, uncomment it to see all of them.

edit: Directly unpacking the list might further improve the readability:

for (PRN, E, Az, Ss, Used) in sat:
    if(Used>0):
        ax.plot(Ss, Az,color='green', marker='s', markersize=5)
    else:
        ax.plot(Ss, Az,color='gray', marker='s', markersize=5)
Sign up to request clarification or add additional context in comments.

3 Comments

I love that Direct unpacking. I didn't know that what possible with Python! Thanks! :)
The problem was the set_rmax as you said. I still have one extra doubt: is it possible to put a label to each represented point?
Sure, you can call the .text method on the ax, given the code above it would become: for (PRN, E, Az, Ss, Used) in sat: if(Used>0): ax.plot(Ss, Az,color='green', marker='s', markersize=5) else: ax.plot(Ss, Az,color='gray', marker='s', markersize=5) ax.text(Ss, Az, PRN, color='red', size=15)
1

in this line:

for index in (0, len(sat)-1):

index only runs over a pair of values. Have you meant the range for index in range(0, len(sat))?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.