# Polar plot

Hello,

I have a problem with polar plot, if i run the following code in
matplotlib 0.98.3, polar plot is drawing a extra circle to go from
angle -3.14159265 to angle 3.03753126. Is there a solution for this problem?

···

********************
import numpy as np
from matplotlib.pyplot import figure, show, rc, grid

# 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
fig = figure(figsize=(8,8))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')

z = np.zeros((1,2000),complex)
z.real = 0.2
z.imag = np.arange(-50,50,0.05)
gamma_r = np.transpose((z-1)/(z+1))

ax.plot(np.angle(gamma_r), np.abs(gamma_r), '.-', zorder=0)
ax.set_rmax(2.0)
grid(True)

show()

********************
Kind regards,
Jean

--
Jan Gillis
Ghent University
IMEC vzw - INTEC
Sint-Pietersnieuwstraat 41
B-9000 Gent
Belgium
tel. +32 9 264 33 33
jan.gillis@...2156...

Hello,

I have a problem with polar plot, if i run the following code in
matplotlib 0.98.3, polar plot is drawing a extra circle to go from
angle -3.14159265 to angle 3.03753126. Is there a solution for this
problem?

********************
import numpy as np
from matplotlib.pyplot import figure, show, rc, grid

# 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
fig = figure(figsize=(8,8))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')

z = np.zeros((1,2000),complex)
z.real = 0.2
z.imag = np.arange(-50,50,0.05)
gamma_r = np.transpose((z-1)/(z+1))

ax.plot(np.angle(gamma_r), np.abs(gamma_r), '.-', zorder=0)

Hi Jan,

It looks like you get the circle because the angles you're plotting go from negative to positive radians in a weird way. The circle being drawn starts around 0 radians and goes clockwise by negative values. Then when it gets to - pi, it switches to positive indices, i.e. pi. Of course, these are the same points on a polar plot, but different angles, if you want to be consistent.

Here are a couple of quick solutions, but there but there maybe better ways of handling this.

# ~~~~~~~~~~~~~~~~~~
# get rid of the plot line above, and add the following
theta = np.angle(gamma_r)
mag = np.abs(gamma_r)

# option 1
ordered = np.argsort(theta, axis=0).squeeze()
ax.plot(theta[ordered], mag[ordered], '.-', zorder=0)

# option 2
neg_theta = np.where(theta < 0)
theta[neg_theta] += 2 * np.pi
ax.plot(theta, mag, '.-', zorder=0)
# ~~~~~~~~~~~~~~~~~~

-Tony

···

On Sep 17, 2008, at 1:59 AM, jan gillis wrote:

ax.set_rmax(2.0)
grid(True)

show()

********************
Kind regards,
Jean

--
Jan Gillis
Ghent University
IMEC vzw - INTEC
Sint-Pietersnieuwstraat 41
B-9000 Gent
Belgium
tel. +32 9 264 33 33
jan.gillis@...2156...

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Hi Tony,

Thank you for the reply, the solutions you propose are fine in this case. But I'm trying to use the polar plot
as a smith chart for an instrument and there i will receive data that is unknown but can be something like this:

r = np.transpose(.1+np.arange ( 0 , 0.7 , 0.001))
theta = -4.5 * np.pi *r
freq = r*10e9
data = np.multiply(r,np.exp(1j*theta))
ax.plot(angle(data),abs(data))

Any idea why Polar plot can't handle theta going from negative to positive radians?

Jan

Tony S Yu wrote:

···

On Sep 17, 2008, at 1:59 AM, jan gillis wrote:

Hello,

I have a problem with polar plot, if i run the following code in
matplotlib 0.98.3, polar plot is drawing a extra circle to go from
angle -3.14159265 to angle 3.03753126. Is there a solution for this
problem?

********************
import numpy as np
from matplotlib.pyplot import figure, show, rc, grid

# 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
fig = figure(figsize=(8,8))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')

z = np.zeros((1,2000),complex)
z.real = 0.2
z.imag = np.arange(-50,50,0.05)
gamma_r = np.transpose((z-1)/(z+1))

ax.plot(np.angle(gamma_r), np.abs(gamma_r), '.-', zorder=0)

Hi Jan,

It looks like you get the circle because the angles you're plotting go from negative to positive radians in a weird way. The circle being drawn starts around 0 radians and goes clockwise by negative values. Then when it gets to - pi, it switches to positive indices, i.e. pi. Of course, these are the same points on a polar plot, but different angles, if you want to be consistent.

Here are a couple of quick solutions, but there but there maybe better ways of handling this.

# ~~~~~~~~~~~~~~~~~~
# get rid of the plot line above, and add the following
theta = np.angle(gamma_r)
mag = np.abs(gamma_r)

# option 1
ordered = np.argsort(theta, axis=0).squeeze()
ax.plot(theta[ordered], mag[ordered], '.-', zorder=0)

# option 2
neg_theta = np.where(theta < 0)
theta[neg_theta] += 2 * np.pi
ax.plot(theta, mag, '.-', zorder=0)
# ~~~~~~~~~~~~~~~~~~

-Tony

ax.set_rmax(2.0)
grid(True)

show()

********************
Kind regards,
Jean

-------------------------------------------------------------------------

This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

It seems you're getting bitten by the brain-dead interpolation of points (which is meant to draw line segments as curves that follow the radii). I have fixed the polar drawing code in SVN r6106 to normalize theta to (0.0 <= theta <= 2pi) before doing the interpolation, which seems to fix your example. The user doesn't/shouldn't have to care about whether theta is negative.

Cheers,
Mike

jan gillis wrote:

···

Hi Tony,

Thank you for the reply, the solutions you propose are fine in this case. But I'm trying to use the polar plot
as a smith chart for an instrument and there i will receive data that is unknown but can be something like this:

r = np.transpose(.1+np.arange ( 0 , 0.7 , 0.001))
theta = -4.5 * np.pi *r
freq = r*10e9
data = np.multiply(r,np.exp(1j*theta))
ax.plot(angle(data),abs(data))

Any idea why Polar plot can't handle theta going from negative to positive radians?

Jan

Tony S Yu wrote:

On Sep 17, 2008, at 1:59 AM, jan gillis wrote:

Hello,

I have a problem with polar plot, if i run the following code in
matplotlib 0.98.3, polar plot is drawing a extra circle to go from
angle -3.14159265 to angle 3.03753126. Is there a solution for this
problem?

********************
import numpy as np
from matplotlib.pyplot import figure, show, rc, grid

# 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
fig = figure(figsize=(8,8))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')

z = np.zeros((1,2000),complex)
z.real = 0.2
z.imag = np.arange(-50,50,0.05)
gamma_r = np.transpose((z-1)/(z+1))

ax.plot(np.angle(gamma_r), np.abs(gamma_r), '.-', zorder=0)

Hi Jan,

It looks like you get the circle because the angles you're plotting go from negative to positive radians in a weird way. The circle being drawn starts around 0 radians and goes clockwise by negative values. Then when it gets to - pi, it switches to positive indices, i.e. pi. Of course, these are the same points on a polar plot, but different angles, if you want to be consistent.

Here are a couple of quick solutions, but there but there maybe better ways of handling this.

# ~~~~~~~~~~~~~~~~~~
# get rid of the plot line above, and add the following
theta = np.angle(gamma_r)
mag = np.abs(gamma_r)

# option 1
ordered = np.argsort(theta, axis=0).squeeze()
ax.plot(theta[ordered], mag[ordered], '.-', zorder=0)

# option 2
neg_theta = np.where(theta < 0)
theta[neg_theta] += 2 * np.pi
ax.plot(theta, mag, '.-', zorder=0)
# ~~~~~~~~~~~~~~~~~~

-Tony

ax.set_rmax(2.0)
grid(True)

show()

********************
Kind regards,
Jean

-------------------------------------------------------------------------

This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

--
Michael Droettboom
Science Software Branch
Operations and Engineering Division
Space Telescope Science Institute
Operated by AURA for NASA