Plot seems weird

Lie Ryan lie.1296 at gmail.com
Mon Dec 26 13:58:43 EST 2011


On 12/27/2011 04:08 AM, Yigit Turgut wrote:
> On Dec 26, 11:28 am, Lie Ryan<lie.1... at gmail.com>  wrote:
>> On 12/26/2011 05:27 AM, Yigit Turgut wrote:
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>> On Dec 25, 7:06 pm, Rick Johnson<rantingrickjohn... at gmail.com>    wrote:
>>>> On Dec 25, 9:33 am, Yigit Turgut<y.tur... at gmail.com>    wrote:
>>>>> Hi all,
>>
>>>>> I have a text file as following;
>>
>>>>> 0.200047        0.000000
>>>>> 0.200053        0.160000
>>>>> 0.200059        0.000000
>>>>> 0.200065        0.080000
>>>>> 0.200072        0.000000
>>>>> 0.200078        0.160000
>>
>>>>> And I am trying to plot it with ;
>>
>>>>> filenames = sys.argv[1:]
>>>>> if len(filenames) == 0:
>>>>>       filenames = [sys.stdin]
>>>>> for filename in filenames:
>>>>>       t,y1 = numpy.genfromtxt(filename, unpack=True)
>>>>>       pyplot.plot(t,y1)
>>>>>       pyplot.show()
>>
>>>>> But graph seems weird, not as it supposed to be. Any ideas ?
>>
>>>> Interesting. Of course "weird" leaves a LOT to be desired. On a scale
>>>> of 1-10, how "weird" is the result?
>>
>>> I apply a 1Khz test signal just to see if things run smoothly, but I
>>> see spikes at lower and higher ends (logic 0,1) where I should see a
>>> clean rectangle pwm signal. By the look of it I say weirdness is
>>> around 3/10.
>>
>> What are you expecting? Your data produces something that looks like the
>> plot on the right of this screenshot
>> (http://i44.tinypic.com/wwhlvp.jpg), I don't see anything weird with
>> that; if you are expecting a square-wave-like plot (like on the left),
>> then you should use a square-wave-like data, pyplot wouldn't magically
>> transform a spiked-plot to squared-plot.
>>
>> Here's what I use to convert the data on right plot to data on left
>> plot, I don't know much about numpy so it might be possible to do it
>> more efficiently or numpy might even have something like it already.
>>
>> from itertools import izip_longest
>> def to_square(t, y1):
>>       sq_data = [[], []]
>>       for x,y, xn in izip_longest(data[0], data[1], data[0][1:]):
>>           sq_data[0].append(x)
>>           sq_data[1].append(y)
>>           sq_data[0].append(xn)
>>           sq_data[1].append(y)
>>       return numpy.array(sq_data, dtype=float)
>
> Thanks for the tip. I know that I feed a square wave signal and record
> this data. Thus I believe the situation can be related to sampling
> frequency.

It is due to sampling frequency, but also because you cannot sample a 
square wave perfectly because square wave has infinite steepness at the 
transitions. Although if you know the exact timing of the transitions, 
it may be possible to reconstruct the transitions perfectly.

> Couldn't get your code working, maybe because I import the data from
> file.

not your fault, I made a mistake when copy-pasteing the code, here's the 
fixed code:

from itertools import izip_longest
def to_square(data):
      sq_data = [[], []]
      for x,y, xn in izip_longest(data[0], data[1], data[0][1:]):
          sq_data[0].append(x)
          sq_data[1].append(y)
          sq_data[0].append(xn)
          sq_data[1].append(y)
      return numpy.array(sq_data, dtype=float)


use it like this:

t,y1 = to_square(numpy.genfromtxt(filename, unpack=True))
pyplot.plot(t,y1)
pyplot.show()




More information about the Python-list mailing list