Max Max -4 years ago 115
Python Question

python27 matplotlib: first and last element connected

Hi I have found the same problem but without an answer:
enter link description here

My problem is that I try to plot data with the matplotlib and it connects the first and the last data point. I am using python27 and Windows 7. My problem is just to big to show complete so I just show some parts of the source code. The plot function is as below:

def plot(x, aw,temperature):
temperatureplot = plt.subplot(211)
awplot = plt.subplot(212)


#set subplots
awplot.set_ylabel('water activity aw')
awplot.margins(y=0.05) #adds a gap between maximum value and edge of diagram
temperatureplot.set_ylabel('Temperature in degree C')

awplot.set_xlabel('Time in [hm]')

I am using this, because I am plotting this in a Tkinter Gui and want to refresh it sometimes. The plot looks like:
enter image description here

My values are:

t = [161000, 161015...., 191115]
aw = [0.618,......, 0.532]
temperature = [23.7,....,24.4]

Is it a problem that I do not start with zero in the t array?

If anybody has a hint or knows the problem please help me.

Cheers Max

Answer Source

Good question! Had a similar problem while plotting time stamped data from a circular buffer. The other answers explained what was going on.

The plot is processing the vectors in strict order, drawing a line from first coordinate to second and so on. But a circular buffer can start with lowest time at any point.

Thus the plot will often start somewhere in the middle of the plot window with nice incrementing time. Then it reaches the insertion point and jumps back in time to the start of the window -- drawing an ugly line -- then resuming up to the starting point.

The quick solution was replacing this line:

plot(pTime, pPos)

with two lines plotting each half in the right order:

plot(pTime[ptr:], pPos[ptr:])
plot(pTime[0:ptr], pPos[0:ptr])
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download