Changing axis options for Polar Plots in Matplotlib/Python

24,376

You can just use the normal way of setting axis limits:

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

offset = 2.0

R1 = [-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358]

fig1 = plt.figure()
ax1 = fig1.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax1.set_ylim(-2,2)
ax1.set_yticks(np.arange(-2,2,0.5))
ax1.plot(theta,R1,lw=2.5)
Share:
24,376
prrao
Author by

prrao

Data Scientist/Engineer. My primary interests are in building end-to-end, intelligent systems using machine learning, knowledge graphs and NLP.

Updated on February 11, 2020

Comments

  • prrao
    prrao about 4 years

    I have a problem changing my axis labels in Matplotlib. I want to change the radial axis options in my Polar Plot.

    Basically, I'm computing the distortion of a cylinder, which is nothing but how much the radius deviates from the original (perfectly circular) cylinder. Some of the distortion values are negative, while some are positive due to tensile and compressive forces. I'm looking for a way to represent this in cylindrical coordinates graphically, so I thought that a polar plot was my best bet. Excel gives me a 'radar chart' option which is flexible enough to let me specify minimum and maximum radial axis values. I want to replicate this on Python using Matplotlib.

    My Python script for plotting on polar coordinates is as follows.

    #!usr/bin/env python
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.arange(-180.0,190.0,10)
    theta = (np.pi/180.0 )*x    # in radians
    
    offset = 2.0
    
    R1 = [-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
    -0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
    -0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
    -0.137,-0.358]
    
    fig1 = plt.figure()
    ax1 = fig1.add_axes([0.1,0.1,0.8,0.8],polar=True)
    ax1.set_rmax(1)
    ax1.plot(theta,R1,lw=2.5)
    

    My plot looks as follows: bad

    But this is not how I want to present it. I want to vary my radial axis, so that I can show the data as a deviation from some reference value, say -2. How do I ask Matplotlib in polar coordinates to change the minimum axis label? I can do this VERY easily in Excel. I choose a minimum radial value of -2, to get the following Excel radar chart:
    excelplot

    On Python, I can easily offset my input data by a magnitude of 2. My new dataset is called R2, as shown:

    #!usr/bin/env python
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.arange(-180.0,190.0,10)
    theta = (np.pi/180.0 )*x    # in radians
    
    offset = 2.0
    
    R2 = [1.642,1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,\
    1.642,1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,1.642,\
    1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,1.642]
    
    fig2 = plt.figure()
    ax2 = fig2.add_axes([0.1,0.1,0.8,0.8],polar=True)
    ax2.plot(theta,R2,lw=2.5) 
    ax2.set_rmax(1.5*offset)
    plt.show()
    

    The plot is shown below: good

    Once I get this, I can MANUALLY add axis labels and hard-code it into my script. But this is a really ugly way. Is there any way I can directly get a Matplotlib equivalent of the Excel radar chart and change my axis labels without having to manipulate my input data?