Рассчитать отметки оси для графика с шагом

Да.

x = np.arange(10)
y = np.random.rand(10)

line, = plt.plot(x,y)
line.set_data(x,np.random.rand(10))
plt.draw()

Однако ваш график становится медленнее, потому что вы расширяете свой кадр данных, и каждая операция добавления, вероятно, копирует этот кадр в память в новое место. По мере увеличения размера фрейма данных эта операция копирования занимает больше времени. Я бы зациклил на индекс и график, что (for ii in range(len(data)): line.set_data(x[:ii], y[:ii]))

EDIT:

import numpy as np
import matplotlib.pyplot as plt; plt.ion()
import pandas as pd

n = 100
x = np.arange(n)
y = np.random.rand(n)
# I don't get the obsession with pandas...
df = pd.DataFrame(dict(time=x, value=y))

# initialise plot and line
line, = plt.plot(df['time'], df['value'])

# simulate line drawing
for ii in range(len(df)):
    line.set_data(df['time'][:ii], df['value'][:ii]) # couldn't be bothered to look up the proper way to index in pd
    plt.draw()
    plt.pause(0.001)
0
задан Matt Clegg 29 March 2019 в 10:19
поделиться

2 ответа

Эта функция вычисляет значения первого и последнего шага:

static void CalcSteps(int min, int max, int stepSize, out int firstStep, out int lastStep)
{
    if (min >= 0)
    {
        firstStep = (min / stepSize) * stepSize;
    }
    else
    {
        firstStep = ((min - stepSize + 1) / stepSize) * stepSize;
    }

    if (max >= 0)
    {
        lastStep = ((max + stepSize - 1) / stepSize) * stepSize;
    }
    else
    {
        lastStep = (max / stepSize) * stepSize;
    }
}
0
ответ дан J.R. 29 March 2019 в 10:19
поделиться

Вы можете рассчитать пределы осей, используя целочисленное округление до более низких и более высоких значений

low = stepsize * (min / stepsize)  //integer division needed
high = stepsize * ((max + stepsize - 1) / stepsize)

Пример кода Python возвращает пределы и количество тиков (на один больше, чем счетчик интервалов)

def getminmax(minn, maxx, step):
    low = (minn // step)
    high = (maxx + step - 1) // step
    ticks = high - low + 1
    return low * step, high * step, ticks


print(getminmax(213, 4405, 1000))
print(getminmax(-1213,1405, 500))

(0, 5000, 6)
(-1500, 1500, 7)
0
ответ дан MBo 29 March 2019 в 10:19
поделиться