Używam matplotlib do utworzenia prostego wykresu liniowego. Mój wykres to prosty zbiór danych z serii czasowych, w którym mam czas wzdłuż osi X i wartość czegoś, co mierzę na osi Y. Wartości y mogą mieć wartości postycyjne lub ujemne i chciałbym wypełnić obszar powyżej i poniżej mojej linii z kolorem niebieskim, jeśli wartość y jest> 0 i czerwona, jeśli wartości y wynoszą < 0. Oto moja działka:Wypełnianie powyżej/poniżej linii działki matplotlib
Jak widać, mogę uzyskać niebieski kolor, aby wypełnić poprawnie, ale nie mogę uzyskać czerwony kolor, aby wypełnić prawidłowo. Oto kod podstawowy Używam:
plt.plot(x, y, marker='.', lw=1)
d = scipy.zeros(len(y))
ax.fill_between(xs,ys,where=ys>=d, color='blue')
ax.fill_between(xs,0,where=ys<=d, color='red')
Jak mogę uzyskać obszar od dodatniej wartość Y na osi x będzie niebieski, a obszar z ujemnym wartość Y na osi x do być czerwony? Dzięki za pomoc.
Wierzę, że ostatnią linią w fragmencie kodu powinno być 'ax.fill_between (xs, ys, gdzie = ys <= d, color = 'red')', ponieważ próbujesz wypełnić obszar między 'y1 = 0' i 'y2 = 0' (tzn. Bez obszaru). Drugi argument (w tym przypadku 'ys') jest przekazywany do parametru' y1', a ponieważ 'y2' ma wartość domyślną' 0', metoda wypełni obszar _between_ tablicę określoną dla 'y1' i linia y = 0, która jest tym, czego potrzebujesz. – hooy
Dzięki za pomoc. Twoja sugestia częściowo działała. Jednak nadal nie otrzymuję właściwego wypełnienia kolorem w przypadkach, w których punkt mówi (10, 10) jest połączony z innym punktem, który przecina oś X, powiedzmy (11, -10). Oto, jak wygląda fabuła: http://postimg.org/image/u329jhlob/ – user1728853
Ach, pomyślałem, że właśnie tego chciałaś, widząc, jak powiedziałeś, że niebieskie wypełnienie na powyższej ilustracji było poprawne. Powinno to być łatwe rozwiązanie: 'ax.fill_between (xs, ys, gdzie = ys <= d, interpolate = True, color = 'red')'. Parametr 'interpolate' powoduje, że funkcja interpoluje, aby znaleźć przecięcie między tablicami" y1 "i" y2 ", aby uzyskać" gładszy "wykres. – hooy