Как заполнить области двумя разными цветами, используя ступенчатые линии (ступенчатые кривые) в pylab (pyplot)? - PullRequest
2 голосов
/ 28 мая 2020

Это мой первый вопрос, так что будьте любезны!

Я нарисовал две линии (ступенчатые), y1 и y2, где y1 - это список с некоторыми случайными числами, а y2 - каждое предыдущее число из y1 list.

from pylab import *

y1 = ([100, 101, 102, 103, 102, 101, 102, 103])
y2 = ([100, 100, 101, 102, 103, 102, 101, 102])
x = (list(range(len(y1))))

plot(x, y1,  linestyle='steps', drawstyle="steps")
plot(x, y2,  linestyle='steps', drawstyle="steps")
xlabel('No.')
ylabel('Level')
title('Step Lines Chart')
grid(True)
fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3, step="pre")
fill_between(x, y1, y2, where=(y1 < y2), color='C1', alpha=0.3, step="pre")
show()

enter image description here

Отсюда я хочу заполнить между этими строками два цвета, когда y1> y2 цветом, а когда y1

Я пробовал с условием where=(y1 < y2)..., также пытался воспроизвести пример документов из здесь , но ни по какой причине не появляется вверх по окну с графиком.

Так что я как бы застрял ...

1 Ответ

0 голосов
/ 28 мая 2020

Хорошо, я использовал массив numpy, и он работал частично, если y1 и y2 такие же, как в примере, оба цвета будут отображаться только тогда, когда квадрат поднимается или опускается, но когда два квадрата находятся на одном уровне, есть не заполняется ... enter image description here

from pylab import *
import numpy as np

y1 = np.array([100, 101, 102, 103, 102, 101, 102, 103])
y2 = np.array([100, 100, 101, 102, 103, 102, 101, 102])

#y1 = np.array([100,100, 101,101, 102,102, 103,103, 102,102, 101,101, 102,102, 103,103])
#y2 = np.array([100,100, 100,100, 101,101, 102,102, 103,103, 102,102, 101,101, 102,102])

x = np.array(list(range(len(y1))))

plot(x, y1, '-', drawstyle="steps")
plot(x, y2, '-', drawstyle="steps")
xlabel('No.')
ylabel('Level')
title('Step Lines Chart')
grid(True)
fill_between(x, y1, y2, where=(y1 > y2), color='C0', alpha=0.3, step="pre")
fill_between(x, y1, y2, where=(y1 < y2), color='C1', alpha=0.3, step="pre")
fill_between(x, y1, y2, where=(y1 == y2), color='yellow', alpha=0.3, step="pre")
show()

Я попытался удвоить все числа (см. прокомментированный синтаксис) и работал немного лучше, но все еще не идеально, сейчас будет хорошо рисовать, но когда два квадрата находятся на одном уровне, заполнит только половину квадрата

enter image description here

Все, что мне нужно, это когда y1 (синий линия) больше, чем y2 (оранжевая линия), квадрат должен быть заполнен синим цветом, а y1

...