Python: Fill area in radar plot

Viewed 380

Here I made this radar plot:

enter image description here

I was looking forward to fill the grey colored area under the polygon to some other color. I am not finding any way to do it.

The code for producing this radar chart looks like this:

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

fig, ax = plt.subplots(figsize=(20, 10))
ax.axis('equal')         ## setting the axis so that we can draw circles

ax.set(xlim=(-10, 23), ylim = (-15, 15))

# drawing the circles
circle_1 = plt.Circle((0, 0), 1.1, fc='none', ec='#D6D6D6', lw=28, zorder=3)
circle_2 = plt.Circle((0, 0), 2.57, fc='none', ec='#D6D6D6', lw=27, zorder=3)
circle_3 = plt.Circle((0, 0), 4.05, fc='none', ec='#D6D6D6', lw=27, zorder=3)
circle_4 = plt.Circle((0, 0), 5.5, fc='none', ec='#D6D6D6', lw=27, zorder=3)
circle_5 = plt.Circle((0, 0), 7.0, fc='none', ec='#D6D6D6', lw=27, zorder=3)

ax.add_artist(circle_1)
ax.add_artist(circle_2)
ax.add_artist(circle_3)
ax.add_artist(circle_4)
ax.add_artist(circle_5)


radar_1 = Polygon([[0, 6.45], [4.3, 4.3], [5.46, 0.02], [6.5, -3.55], [-0.04, -2.25], [-5.5, -3.5], [-6.55, 0.0], [-0.33, 4.7]],
                   fc='#246864', lw=1.2, zorder=2)
radar_2 = Polygon([[0, 6.45], [4.3, 4.3], [5.46, 0.02], [6.5, -3.55], [-0.04, -2.25], [-5.5, -3.5], [-6.55, 0.0], [-0.33, 4.7]],
                  fc='none', ec='#000000', zorder=3)

ax.add_artist(radar_1)
ax.add_artist(radar_2)


ax.axis('off')
plt.show()
1 Answers

With set_clip_path() the circles can be clipped by the polygon:

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

fig, ax = plt.subplots(figsize=(20, 10))
ax.axis('equal')
ax.set(xlim=(-10, 23), ylim=(-15, 15))

vertices = [[0, 6.45], [4.3, 4.3], [5.46, 0.02], [6.5, -3.55], [-0.04, -2.25], [-5.5, -3.5], [-6.55, 0.0], [-0.33, 4.7]]
radar_1 = Polygon(vertices, fc='#246864', lw=1.2, zorder=1)
radar_2 = Polygon(vertices, fc='none', ec='#000000', zorder=4)
ax.add_patch(radar_1)
ax.add_patch(radar_2)

for rad in [1.1, 2.57, 4.05, 5.5, 7.0]:
    circle1 = plt.Circle((0, 0), rad, fc='none', ec='#D6D6D6', lw=27, zorder=2)
    ax.add_patch(circle1)
    circle2 = plt.Circle((0, 0), rad, fc='none', ec='turquoise', lw=27, zorder=3)
    circle2.set_clip_path(radar_2)
    ax.add_patch(circle2)

ax.axis('off')
plt.tight_layout()

enter image description here

Related