Issue
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):
plt.clf()
temperatureplot = plt.subplot(211)
awplot = plt.subplot(212)
temperatureplot.grid()
awplot.grid()
#set subplots
awplot.set_ylabel('water activity aw')
awplot.plot(x,aw)
awplot.margins(y=0.05) #adds a gap between maximum value and edge of diagram
temperatureplot.set_ylabel('Temperature in degree C')
temperatureplot.plot(x,temperature)
temperatureplot.margins(y=0.05)
awplot.set_xlabel('Time in [hm]')
plt.gcf().canvas.draw()
I am using this, because I am plotting this in a Tkinter Gui and want to refresh it sometimes. The plot looks like:
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?
Solution
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])
Answered By - jmn
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.