Search code examples
pythonmatplotlibradar-chart

Tutorial for python radar chart/plot


I want to do a radar plot in python but i don't know how to do it. I read some tutorials on the web and most of them are very complicated (drawing polygones, making calculations to place points, ...).

So I wonder if someone have a "simple" tutorial on it. I don't want to do something very extraordinary, juste simple. Also if there is a python library which can do it. All the tutorials I read are using matplotlib, but it's quite difficult. I also find the library "pychardir" but I can't install it.


Solution

  • A first start should be this example at the matplotlib site: pie_and_polar_charts example code: polar_bar_demo.py

    If you still have questions you can always come back. Agreed: good radar chart examples with Python or matplotlib are hard to find.

    Here is my run enter image description here

    # Plots a radar chart.
    
    from math import pi
    import matplotlib.pyplot as plt
    
    
    # Set data
    cat = ['Speed', 'Reliability', 'Comfort', 'Safety', 'Effieciency']
    values = [90, 60, 65, 70, 40]
    
    N = len(cat)
    
    x_as = [n / float(N) * 2 * pi for n in range(N)]
    
    # Because our chart will be circular we need to append a copy of the first 
    # value of each list at the end of each list with data
    values += values[:1]
    x_as += x_as[:1]
    
    
    # Set color of axes
    plt.rc('axes', linewidth=0.5, edgecolor="#888888")
    
    
    # Create polar plot
    ax = plt.subplot(111, polar=True)
    
    
    # Set clockwise rotation. That is:
    ax.set_theta_offset(pi / 2)
    ax.set_theta_direction(-1)
    
    
    # Set position of y-labels
    ax.set_rlabel_position(0)
    
    
    # Set color and linestyle of grid
    ax.xaxis.grid(True, color="#888888", linestyle='solid', linewidth=0.5)
    ax.yaxis.grid(True, color="#888888", linestyle='solid', linewidth=0.5)
    
    
    # Set number of radial axes and remove labels
    plt.xticks(x_as[:-1], [])
    
    # Set yticks
    plt.yticks([20, 40, 60, 80, 100], ["20", "40", "60", "80", "100"])
    
    
    # Plot data
    ax.plot(x_as, values, linewidth=0, linestyle='solid', zorder=3)
    
    # Fill area
    ax.fill(x_as, values, 'b', alpha=0.3)
    
    
    # Set axes limits
    plt.ylim(0, 100)
    
    
    # Draw ytick labels to make sure they fit properly
    for i in range(N):
        angle_rad = i / float(N) * 2 * pi
    
        if angle_rad == 0:
            ha, distance_ax = "center", 10
        elif 0 < angle_rad < pi:
            ha, distance_ax = "left", 1
        elif angle_rad == pi:
            ha, distance_ax = "center", 1
        else:
            ha, distance_ax = "right", 1
    
        ax.text(angle_rad, 100 + distance_ax, cat[i], size=10, horizontalalignment=ha, verticalalignment="center")
    
    
    # Show polar plot
    plt.show()