Как заполнить обе стороны линии морским рожком? - PullRequest
0 голосов
/ 13 мая 2019

Мне нужно заполнить разными цветами (возможно, зеленым и красным) две стороны графика. Я использую следующий код:

import seaborn as sns
import matplotlib.pyplot as plt 
import matplotlib

range_x = [-1, 0, 1, 2]
range_y = [-5, -3, -1, 1]

ax = sns.lineplot(x = range_x, y = range_y, markers = True)
sns.lineplot(ax = ax, x = [range_x[0], range_x[-1]], y = [0, 0], color = 'black')
sns.lineplot(ax = ax, x = [0, 0], y = [range_y[0], range_y[-1]], color = 'black')

ax.fill_between(range_x, range_y, facecolor = 'red', alpha = 0.5)

plt.savefig('test_fig', bbox_inches = 'tight')
plt.close()

С этим кодом я получаю следующую цифру:

enter image description here

Но, очевидно, это ошибка, потому что я хочу красный цвет над синей линией. Кроме того, я хочу, чтобы мои оси x и y были замечательным образом, я получаю их с осью x, но я не знаю, почему я не могу получить их с осью y.

Заранее большое спасибо!

1 Ответ

0 голосов
/ 14 мая 2019

Что-то вроде этого?:

ax = sns.lineplot(x = range_x, y = range_y, markers = True)
sns.lineplot(ax = ax, x = [range_x[0], range_x[-1]], y = [0, 0], color = 'black')
sns.lineplot(ax = ax, x = [0, 0], y = [range_y[0], range_y[-1]], color = 'black')

ax.fill_between(range_x, range_y,[ax.get_ylim()[1]]*len(range_x), facecolor = 'red', alpha = 0.5)
ax.fill_between(range_x, range_y,[ax.get_ylim()[0]]*len(range_x), facecolor = 'green', alpha = 0.5)

Из документации из fill_between:

y2: массив (длина N) или скаляр,необязательный, по умолчанию: 0 Y-координаты узлов, определяющих вторую кривую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...