2016-08-04 2 views
1

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

Я следил за этим example, чтобы понять, как работает анимированный график, и я также обнаружил, что answer демонстрирует, как можно включить цвет. Проблема в том, что в этом подходе весь график перерисовывается на каждой итерации, тем самым изменяя цвет всего графика, а не только только что нанесенную точку данных.

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

ответ

0

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

import numpy as np 
import matplotlib 
import matplotlib.pyplot as plt 
import matplotlib.animation as animation 


def data_gen(t=0): 
    cnt = 0 
    while cnt < 1000: 
     cnt += 1 
     t += 0.01 
     yield t, np.sin(2*np.pi*t) * np.exp(-t/10.) 

def get_colour(t): 
    cmap = matplotlib.cm.get_cmap('Spectral') 
    return cmap(t%1.) 

def init(): 
    ax.set_ylim(-1.1, 1.1) 
    ax.set_xlim(0, 10) 


fig, ax = plt.subplots() 
ax.grid() 

def run(data): 

    # Get some data and plot 
    t, y = data 
    ax.scatter(t, y, c=get_colour(t)) 

    #Update axis 
    xmin, xmax = ax.get_xlim() 
    if t >= xmax: 
     ax.set_xlim(xmin, 2*xmax) 
     ax.figure.canvas.draw() 

ani = animation.FuncAnimation(fig, run, data_gen, blit=False, interval=10, 
           repeat=False, init_func=init) 
plt.show() 
+0

хороший подход на самом деле, таким образом, вы действительно можете рисовать каждый DTP, как вы хотите, в моем случае точки слишком много данных может быть случай, когда каждая timeserie содержит приблиз 2000000 DTPS – LetsPlayYahtzee

+0

Проблема в том, что с 'line.set_xaxis' вы обновляете данные и можете использовать' blit' только для перерисовки новых точек (см. Http://stackoverflow.com/questions/8955869/why-is-plotting-with-matplotlib-so -медленный). Каждый вызов разбрасывать добавляет точки как новую коллекцию (не думайте, что вы можете добавить в коллекцию). Для эффективности вы можете построить 2 000 000 точек в виде нескольких коллекций, например. путем изменения 'data_gen' для возврата/построения блоков за раз (или только построения графика, когда у вас достаточно точек, а не аргумент' c' может быть массивом значений). –

+0

Другая проблема с разбросом заключается в том, что по мере того, как анимация прогрессирует, и все больше очков добавляется, плотность увеличивается, вы не можете отличить цвет dtps, если вы не увеличиваете масштаб, но пока он все еще находится в анимации, довольно сложно увеличить – LetsPlayYahtzee

Смежные вопросы