Добавление стрелок к передним краям импульсных графиков в matplotlib - PullRequest
0 голосов
/ 21 августа 2011

Нужна помощь в matplotlib, чтобы выяснить ответы для

  1. Как сделать стрелку, направленную вверх, и стрелку, направленную вниз вдоль кривой / линии на графике?

  2. Как настроить диапазон / пределы графика так, чтобы его края были четко видны на графике?

Я хотел добавитьстрелки на переднем фронте пульсирующей волны (стрелка вниз на падающих фронтах импульса была бы бонусом) и не могли найти простой способ сделать это (примеры на странице аннотаций служат совсем другой цели).

Так как картинка проясняет ситуацию, мой код:

from pylab import *

# How do I have arrows pointing up for every even value and pointing down for every odd value along Y axis for the highest freq.

baseFreqTimePeriod = 100
samplingFreqTimePeriod = 0.001

numberOfPulses = 10

def baseFreq(inputTime, timePeriod):

    sampleWindow = timePeriod

    return [ (1.0/(timePeriod/baseFreqTimePeriod)) if((i % sampleWindow) <= (sampleWindow / 2)) else 0.0 for i in inputTime ]

    '''
    output = []

    for i in inputTime:

        sampleIsAtPosition = i % sampleWindow

        if(sampleIsAtPosition <= (sampleWindow / 2)):

            output.append(1.0/(timePeriod/baseFreqTimePeriod))
        else:
            output.append(0.0)

    return output
    '''

t = arange(0.0, numberOfPulses * baseFreqTimePeriod, samplingFreqTimePeriod)

baseFreqFn = baseFreq(t, baseFreqTimePeriod)
plot(t, baseFreqFn, linewidth=1.0)

baseFreqFn = baseFreq(t, 2 * baseFreqTimePeriod)
plot(t, baseFreqFn, linewidth=2.0)

baseFreqFn = baseFreq(t, 3 * baseFreqTimePeriod)
plot(t, baseFreqFn, linewidth=2.0)

xlabel('time (uS)')
ylabel('Amplitude')
title('Test')
grid(True)
show()

Это создает вывод:

enter image description here

Вместо этогосделаю меня счастливым (только первые несколько нарисованных стрелок)

enter image description here

Кроме того, обратите внимание, как окно отображения графика делает вершину клипа с полной амплитудой волны?(нижние биты также скрыты)

Было бы замечательно, если бы я мог видеть пиковые значения (ось выходит за пределы диапазона данных), как здесь:

enter image description here (http://web.mit.edu/6.02/www/f2009/handouts/labs/lab2_7_1.png)

1 Ответ

2 голосов
/ 22 августа 2011

Чтобы сделать стрелку, вы можете использовать подпрограмму arrow:

     #x,y, dx, dy,
arrow(0,0,  0,1.0,
    'lw':2,
    'color':'black',
    'head_width':baseFreqTimePeriod/4,
    'head_length':0.05

, чтобы сделать стрелку, указывающую вниз, установите отрицательный dy .:

arrow(baseFreqTimePeriod,0,  0,-1.0,
    'lw':2,
    'color':'black',
    'head_width':baseFreqTimePeriod/4,
    'head_length':0.05

Чтобы изменить пределы графика, используйте xlim и `ylim ':

ylim([-.2,1.2])
xlim([-.1*t[-1],t[-1]*1.1])

Есть документация по стрелка , xlim и ylim . Также возможно сделать стрелку с текстом, используя метод annotate .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...