简体   繁体   中英

How do I color background based on 1 or 0 in Python

I want the background of the graph of x to be grey when y=1 and white when y=0

    #some random data
    x = np.random.random(12)
    #0's and 1's
    y = [0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1]

    plt.plot(np.linspace(0, 12, 12), x);

So it looks something like this in stead of this

You can try manually drawing the rectangles using a loop:

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

idx = np.linspace(0, 12, 12)
x = np.random.random(12)
y = [0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1]

fig, ax = plt.subplots(1)
ax.plot(idx, x)

rect_height = np.max(x)
rect_width = 1

for i, draw_rect in enumerate(y):
    if draw_rect:
        rect = patches.Rectangle(
            (i, 0),
            rect_width,
            rect_height,
            linewidth=1,
            edgecolor='grey',
            facecolor='grey',
            fill=True
        )
        ax.add_patch(rect)

plt.show()

输出图

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM