Nowy użytkownik matplotlib tutaj. Próbuję wykreślić linię danych zakodowaną w kolorze lub, lepiej, w zakodowanym w kolorze zakresie danych. Odstępy kodowania kolorami wzdłuż osi Y. Poniżej przedstawiono prosty skrypt demonstracyjny:Matplotlib - siatki i kreślące kolorowe wartości y/zakresy danych
import matplotlib.pyplot as plt
# dummy test data
datapoints = 25
maxtemps = [ 25, 24, 24, 25, 26, 27, 22, 21, 22, 19, 17, 14, 13, 12, 11, 12, 11, 10, 9, 9, 9, 8, 9, 9, 8 ]
mintemps = [ 21, 22, 22, 22, 23, 24, 18, 17, 16, 14, 10, 8, 8, 7, 7, 6, 5, 5, 5, 4, 4, 4, 3, 4, 3 ]
times = list(xrange(datapoints))
# cap a filled plot at a given level
def capped(indata, cap):
outdata = [0] * datapoints
lcount = 0
while lcount < datapoints:
if indata[lcount] > cap:
outdata[lcount] = cap
else:
outdata[lcount] = indata[lcount]
lcount += 1
return outdata
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.fill_between(times, 0, maxtemps, color='#FF69B4', zorder=1, linewidth=0.1)
ax1.fill_between(times, 0, capped(maxtemps,25), color='#F08228', zorder=2, linewidth=0.1)
ax1.fill_between(times, 0, capped(maxtemps,20), color='#E6AF2D', zorder=3, linewidth=0.1)
ax1.fill_between(times, 0, capped(maxtemps,15), color='#E6DC32', zorder=4, linewidth=0.1)
ax1.fill_between(times, 0, capped(maxtemps,10), color='#A0E632', zorder=5, linewidth=0.1)
ax1.fill_between(times, 0, capped(maxtemps,5), color='#00DC00', zorder=6, linewidth=0.1)
ax1.fill_between(times, 0, mintemps, color='#FFFFFF', zorder=7, linewidth=0.1)
plt.setp(ax1.get_xticklabels(), visible=False)
ax1.grid(True, zorder=8)
ylim(0)
plt.draw()
plt.show()
Wykonuje większość zadań, ale wymaga dwóch pytań.
Czy jest bardziej bezpośredni, elegancki sposób, aby osiągnąć ten sam efekt z funkcją matplotlib jestem nieświadomy? Oznacza to albo wykreślić tablicę 1D (powiedzmy) szeregów czasowych danych, albo zilustrować zakres pomiędzy dwoma zestawami takich danych (na przykład maksymalną, minimalną temperaturą)?
Spróbuj tak, jak mogę, nie mogę przekonać linii siatki do spiskowania na szczycie figury. Wydaje się, że zawsze znajdują się na pierwszym zestawie wykreślonych danych, a następnie zostają zakopane przez kolejne spiskowane dane, pozostawiając dolną połowę wykresu pustą. Używanie zordu wydaje się być ignorowane.
Wielkie dzięki.