Home > other >  Plot rectangle using defined x-axis in Matplotlib
Plot rectangle using defined x-axis in Matplotlib

Time:03-12

I'd like to plot rectangles using defined xticks and ylim using Matplotlib, as shown in the example below:

import matplotlib.pyplot as plt

x = ['00:00', '01:00', '02:00', '03:00', '04:00' , '05:00', '06:00', '07:00', '08:00' ,'09:00' ,'10:00', '11:00', '12:00',
            '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00']

plt.ylim([1,10])

With those limits, use the x index to print a rectangle following this:

rect = Rectangle((x[4], x[7]), 4, 8, color='yellow')

Finally, the idea is have multiples rectangles. There's a way to do that without use date/time functions?

CodePudding user response:

The parameters for plt.Rectangle are ((x, y), width, height). You can draw a rectangle for example as follows:

import matplotlib.pyplot as plt
from matplotlib.colors import to_rgba

x = ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00',
     '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00']
plt.figure(figsize=(15, 5))
plt.xticks(range(len(x)), x)
plt.ylim([1, 10])
x_start, x_end = 4, 7
y_start, y_end = 4, 8
ax = plt.gca()
ax.add_patch(plt.Rectangle((x_start, y_start), x_end - x_start, y_end - y_start,
                           facecolor=to_rgba('crimson', 0.5), edgecolor='black', lw=2))
plt.show()

matplotlib add rectangle

  • Related