Arrows in Polar Matplotlib Plot

11,703

Arrow sizes were too big, this:

import matplotlib
import numpy as np
import matplotlib.pyplot as plt

print "matplotlib.__version__   = ", matplotlib.__version__
print "matplotlib.get_backend() = ", matplotlib.get_backend()


# radar green, solid grid lines
plt.rc('grid', color='#316931', linewidth=1, linestyle='-')
plt.rc('xtick', labelsize=15)
plt.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 = plt.figure(figsize=(size, size))
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True, axisbg='#d5de9c')

r = np.arange(0, 3.0, 0.01)
theta = 2*np.pi*r
ax.plot(theta, r, color='#ee8d18', lw=3)
ax.set_rmax(2.0)
plt.grid(True)

ax.set_title("And there was much rejoicing!", fontsize=20)
#This is the line I added:
arr1 = plt.arrow(0, 0.5, 0, 1, alpha = 0.5, width = 0.015,
                 edgecolor = 'black', facecolor = 'green', lw = 2, zorder = 5)

# arrow at 45 degree
arr2 = plt.arrow(45/180.*np.pi, 0.5, 0, 1, alpha = 0.5, width = 0.015,
                 edgecolor = 'black', facecolor = 'green', lw = 2, zorder = 5)

plt.show()

Produces:

enter image description here

Better? :)

Share:
11,703
Jesse
Author by

Jesse

I am currently an Embedded Software Engineer in Grand Rapids, MI.

Updated on June 04, 2022

Comments

  • Jesse
    Jesse almost 2 years

    I am trying to plot the phasors of the voltage across the resistor, capacitor, and inductor in an series R-L-C circuit. I have done all of the calculations and I can get a decent plot with just the normal ax.plot(theta,r,....).

    I would like to make the phasor vectors look like arrows. I have been trying to use ax.arrow(0,0,theta,magnitude) but it looks like a line still. The gist to the code that I have written is here : GIST

    My image that I create is

    I tried to follow the example that I found on this list because it is very similar to what I want to accomplish, it produces the following image:

    When I run their code on my computer I get

    I am on Xubuntu 14.04 and running matplotlib 1.3.1. I do see that the example I am using was using matplotlib 0.99 in 2009.

    Any help would be much appreciated.

  • Jesse
    Jesse almost 10 years
    Thank you for your response, I see that now for the width and it worked for me but I would like to apply this to my Phasor Diagram now. I have this for my phasor vector: ax.arrow(LV.theta[1],0,0,LV.mag[1], width=0.005,length_includes_head=True,edgecolor = 'black', facecolor = 'green', lw = 2, zorder = 5) The diagram now looks like thisDiagram
  • Jesse
    Jesse almost 10 years
    I realized now it was the head_length attribute I was not setting properly