I create the error: IndexError: too many indices for array. Because I try to do a for loop on my arrays. I don't know why i get this error. Because this error means my data don't fit in my array, but my arrays are filled in correctly?
my program:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
import matplotlib.dates as mdates
import numpy as np
from datetime import datetime
from dateutil.parser import parse
import time
style.use('fivethirtyeight')
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
def animate(i):
graph_data = open('Test.txt','r').read()
lines = graph_data.split('\n')
xs = []
ys = []
for line in lines:
if len(line) > 1:
x,y = line.split (',')
xs.append(float(x))
ys.append(float(y))
ax1.clear()
ax1.plot(xs,ys)
gems = []
gem = open ('Test1.txt','r').read()
gem = float(gem)
gems.append(float(gem))
y = float(y)
x = float(x)
ax1.axhline(gem, color='k', linewidth=1)
print (xs, ys)
for i in range (len(xs)):
num = i
if ys[num] <= gem:
ax1.fill_between(xs[num], gem, ys[num], facecolor='g', alpha=1)
else:
ax1.fill_between(xs[num], gem, ys[num], facecolor='r', alpha=1)
Error code:
Traceback (most recent call last):
File "C:\Users\Benjamin\Python37\lib\site-packages\matplotlib\cbook\__init__.py", line 388, in process
proxy(*args, **kwargs)
File "C:\Users\Benjamin\Python37\lib\site-packages\matplotlib\cbook\__init__.py", line 228, in __call__
return mtd(*args, **kwargs)
File "C:\Users\Benjamin\Python37\lib\site-packages\matplotlib\animation.py", line 1081, in _start
self._init_draw()
File "C:\Users\Benjamin\Python37\lib\site-packages\matplotlib\animation.py", line 1792, in _init_draw
self._draw_frame(next(self.new_frame_seq()))
File "C:\Users\Benjamin\Python37\lib\site-packages\matplotlib\animation.py", line 1814, in _draw_frame
self._drawn_artists = self._func(framedata, *self._args)
File "C:\Users\Benjamin\Python37\Test.py", line 49, in animate
ax1.fill_between(xs[num], gem, ys[num], facecolor='g', alpha=1)
File "C:\Users\Benjamin\Python37\lib\site-packages\matplotlib\__init__.py", line 1717, in inner
return func(ax, *args, **kwargs)
File "C:\Users\Benjamin\Python37\lib\site-packages\matplotlib\axes\_axes.py", line 4786, in fill_between
for ind0, ind1 in mlab.contiguous_regions(where):
File "C:\Users\Benjamin\Python37\lib\site-packages\matplotlib\mlab.py", line 3835, in contiguous_regions
idx, = np.nonzero(mask[:-1] != mask[1:])
IndexError: too many indices for array
>>>
When i try this program i don't have an error but it fill trough the whole x-axis. program:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
from matplotlib import style
import matplotlib.dates as mdates
import numpy as np
from datetime import datetime
from dateutil.parser import parse
import time
style.use('fivethirtyeight')
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
def animate(i):
graph_data = open('Test.txt','r').read()
lines = graph_data.split('\n')
xs = []
ys = []
for line in lines:
if len(line) > 1:
x,y = line.split (',')
xs.append(float(x))
ys.append(float(y))
ax1.clear()
ax1.plot(xs,ys)
gems = []
gem = open ('Test1.txt','r').read()
gem = float(gem)
gems.append(float(gem))
y = float(y)
x = float(x)
ax1.axhline(gem, color='k', linewidth=1)
print (xs, ys)
for i in range (len(xs)):
num = i
if ys[num] <= gem:
ax1.fill_between(xs, gem, ys[num], facecolor='g', alpha=1)
else:
ax1.fill_between(xs, gem, ys[num], facecolor='r', alpha=1)
XS and YS:
[0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0] [1.0, 0.0, -1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0, 1.0, 0.0, -1.0, -1.0, 1.0]
On the end you see the colors when its not zero.. The solution graph