Форум сайта python.su
Есть массив данных.
dataset = [[1467492000.0, 25.67],[1467492060.0, 5.2],[1467492120.0, 3.1] ... [x, y]] # всего где то 60 тысяч элементов; типа поминутные данные приблизительно за месяц
Отредактировано agryn (Авг. 26, 2016 01:31:03)
Офлайн
Можно попробовать интерполировать B-сплайном, а потом на этом сплайне выбрать точки как нужно. Например, как-то так:
#coding: utf-8 from scipy import interpolate import numpy as np # данные [[1,2], .. [x,y]] etc input_array = np.random.rand(1000, 2) input_array = np.array(input_array) # на всякий случай, если input_array есть list tck, u = interpolate.splprep([input_array[:,0], input_array[:,1]], s=0) resolution = 100 # хочу чтобы было 100 точек только unew = np.arange(0, 1.0+1.0/resolution, 1.0/resolution) r = np.array(interpolate.splev(unew,tck)).transpose() from pylab import * plot(r[:,0], r[:,1]) show()
Офлайн
А что вы с svg собираетесь делать? Масштабировать сдвигать или просто показывать?
Когда точек много принято показывать не кривую а замещающий образ. Выбираете количество точек по оси x (ну например количество пикселей на отображающем устройстве) и рисуете диапазон изменения значений в пределах каждого интервала а не линию. Многие любят кроме диапазона нарисовать еще сверху и среднее на интервале. К этим границам можно применить алгоритмы сжатия, например который вы привели. т.е. рисовать надо не линию а полигоны или заполненные замкнутые безье кривые.
Офлайн
doza_andТолько показывать.
А что вы с svg собираетесь делать?
doza_andА этот способ имеет какое то общепринятое название?
Выбираете количество точек по оси x (ну например количество пикселей на отображающем устройстве) и рисуете диапазон изменения значений в пределах каждого интервала а не линию.
Офлайн
agrynЧестно говоря не знаю.
А этот способ имеет какое то общепринятое название?
agrynЕсли только это тогда есть еще один способ. Не париться и сделать png. Он будет меньше. :)
Только показывать.
Офлайн
agrynЧестно говоря не знаю.
А этот способ имеет какое то общепринятое название?
agrynЕсли только это тогда есть еще один способ. Не париться и сделать png. Он будет меньше. :)
Только показывать.
Офлайн