Matplotlib - Fill_Between не похоже на работу - PullRequest
0 голосов
/ 15 февраля 2019

Я новичок в python и за тонну выучил за последние 2 недели.Я только начал изучать и экспериментировать с matplotlib.pylot.В моем коде у меня есть 3 отдельных простых графика на одном графике, на третьем графике 2 линии.Я пытаюсь получить зеленый fill_between, когда y2> y3, и красный fill_between, когда y3> y2.Я взглянул на другой код, и он выглядит идентично моему, но по какой-то причине он не работает.Любая помощь?

Есть несколько закомментированных строк, они просто эксперименты.

import matplotlib.pyplot as plt
import random
from matplotlib import style


style.use('fivethirtyeight')

def create_points(nPoints):
    xs = []
    ys = []
    for i in range(nPoints):
        rand = random.randrange(0,3*nPoints)
        xs.append(i)
        ys.append(rand)
    return xs, ys

x,y = create_points(200)
x1,y1 = create_points(200)
x2, y2 = create_points(200)
x3, y3 = create_points(200)

fig = plt.figure()
ax1 = plt.subplot2grid((6,1), (0,0), rowspan = 1, colspan = 1)
plt.title('Subplot2grid Method')
plt.ylabel('Plot 1')

ax2 = plt.subplot2grid((6,1), (1,0), rowspan = 4, colspan = 1, sharex = ax1)
plt.ylabel('Plot 2')
ax2_xtwin = ax2.twinx()

ax3 = plt.subplot2grid((6,1), (5,0), rowspan = 1, colspan = 1, sharex = ax1)
plt.xlabel('x')
plt.ylabel('Plot 3')


ax2_xtwin.fill_between(x,0,y, facecolor = '#0079a3', alpha = 0.4)
#ax2v.axes.yaxis.set_ticklables([])
ax2_xtwin.grid(False)
ax2_xtwin.set_ylim(0, 1.5*max(y))


ax3.plot(x2, y2, x2, y3, linewidth = 1, label = 'x2y2 plot', color = 'k')

#ax3.plot(x3, y3, linewidth = 1, label = 'x3y3 plot', color = 'firebrick')

ax3.fill_between(x2, y2, y3, where = (y2 >= y3), facecolor = 'darkgreen',
                 edgecolor = 'g', alpha = 0.5, interpolate = True)
ax3.fill_between(x2, y2, y3, where = (y2 <= y3), facecolor = 'firebrick',
                 edgecolor = 'r', alpha = 0.5, interpolate = True)

#Print Points

ax1.plot(x, y, linewidth = 1, label = 'xy plot', color = 'gold')

ax2.plot(x1, y1, linewidth = 1, label = 'x1y1 plot', color = 'sandybrown')

#ax3.plot(x2, y2, linewidth = 1, label = 'x2y2 plot', color = 'darkgreen')

#ax3.plot(x3, y3, linewidth = 1, label = 'x3y3 plot', color = 'firebrick')

plt.subplots_adjust(left = 0.15, bottom = 0.1, right = 0.9, top = 0.9,
                    wspace = 0.2, hspace = 0)

plt.show()

1 Ответ

0 голосов
/ 15 февраля 2019

Редактировать: Извините, я не понял вашего вопроса.

Если вы удалите color = 'k' в ax3.plot и замаскируете y2 после первого fill_between, он будет работать нормально.Измените на ...

ax3.plot(x2, y2, x2, y3, linewidth = 1, label = 'x2y2 plot')

ax3.fill_between(x2, y2, y3, where = (y2 >= y3), color = "g",
                 edgecolor = 'g', alpha = 0.5, interpolate = True)
y2 = np.ma.masked_greater(y2, y3)
ax3.fill_between(x2, y2, y3, where = (y2 <= y3), color="r",
                 edgecolor = 'r', alpha = 0.5, interpolate = True)

Я не уверен, почему, но цвет лица не работал на моей стороне, поэтому я сменил цвет.

Надеюсь, это поможет.

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