2012-07-23 14 views
18

एनिमेटेड ग्राफ बनाने का कोई तरीका है। उदाहरण के लिए, विभिन्न पैरामीटर के साथ, एक ही ग्राफ दिखा रहा है।ipython नोटबुक में एनिमेटेड ग्राफ

उदाहरण के लिए सेज नोटबुक है, एक लिख सकते हैं:

a = animate([circle((i,i), 1-1/(i+1), hue=i/10) for i in srange(0,2,0.2)], 
      xmin=0,ymin=0,xmax=2,ymax=2,figsize=[2,2]) 
a.show() 

उत्तर

7

अपडेट: जनवरी 2014

जेक Vanderplas matplotlib उपलब्ध here एनिमेशन के लिए एक जावास्क्रिप्ट आधारित पैकेज बनाया गया है।

# https://github.com/jakevdp/JSAnimation 
from JSAnimation import examples 
examples.basic_animation() 

Example of Jake's JSAnimation package

अधिक पूर्ण विवरण और उदाहरण के लिए his blog post देखें: यह का उपयोग के रूप में सरल रूप में है। ऐतिहासिक जवाब (एक सुधार के लिए goger देखें)

हाँ, जावास्क्रिप्ट अद्यतन सही ढंग से छवि फ्रेम अभी तक पकड़ नहीं है, इसलिए झिलमिलाहट वहाँ है, लेकिन आप इस तकनीक का उपयोग काफी सरल कुछ कर सकते हैं:

import time, sys 
from IPython.display import clear_output 
f, ax = plt.subplots() 

for i in range(10): 
    y = i/10*sin(x) 
    ax.plot(x,y) 
    time.sleep(0.5) 
    clear_output() 
    display(f) 
    ax.cla() # turn this off if you'd like to "build up" plots 
plt.close() 
+0

क्या आप शायद एक समझदार एक्स मान भी जोड़ सकते हैं? मैंने आपके उदाहरण को एक साधारण श्रेणी (100) और numpy.arange (0, 2 * pi, 0.01) के साथ करने की कोशिश की, लेकिन न तो एक अच्छा आउटपुट बनाता है। ऐसा लगता है कि –

+0

के रूप में इस कोड को चलाने के लिए आपको कुछ आयात याद आ रहे हैं। यह टिप्पणी थोड़ी सालों बाद है: ** झटके से बचने के लिए ** सेट 'clear_output (True)' (IPython 2.0.0) –

+0

धन्यवाद @eldad! मुझे इसे फिर से अपडेट करना चाहिए :) –

9

यह भयानक झटकेदार है, लेकिन कम से कम यह एक साजिश बनाता है जो मेरे लिए एनिमेट करता है। यह Aron के आधार पर है, लेकिन Aron के रूप में काम नहीं करता है।

import time, sys 
from IPython.core.display import clear_output 
f, ax = plt.subplots() 

n = 30 
x = array([i/10.0 for i in range(n)]) 
y = array([sin(i) for i in x]) 
for i in range(5,n): 
    ax.plot(x[:i],y[:i]) 
    time.sleep(0.1) 
    clear_output() 
    display(f) 
    ax.cla() # turn this off if you'd like to "build up" plots 
plt.close() 
5

आप IPython नोटबुक, v2.0 और समर्थन interactive widgets ऊपर का उपयोग करते हैं। आप एक अच्छी उदाहरण नोटबुक here (एनबी। आपको स्लाइडर देखने के लिए अपनी मशीन से डाउनलोड और चलाने की आवश्यकता है) मिल सकती है।

यह अनिवार्य रूप से interact आयात करने के लिए उबलता है, और फिर इसे पैरामीटर के साथ श्रेणियों के साथ एक समारोह पास करता है। उदाहरण के लिए, दूसरी कड़ी से:

In [8]: 
def pltsin(f, a): 
    plot(x,a*sin(2*pi*x*f)) 
    ylim(-10,10) 
In [9]: 
interact(pltsin, f=(1,10,0.1), a=(1,10,1)); 

यह एक साजिश दो स्लाइडर्स, f और a के लिए के साथ का उत्पादन करेगा।

+0

मैं iPython नोटबुक में एक अलग तरह की चीज को एनिमेट करने की कोशिश कर रहा हूं और यह अब तक के सबसे अच्छे समाधान के बारे में दिखता है। क्या इसे स्वचालित रूप से एनिमेट करने का कोई तरीका है ताकि उपयोगकर्ता को स्लाइडर में हेरफेर करने की आवश्यकता न हो? – Addem

+0

मुझे नहीं लगता कि यह करने के लिए यह छोटा है। लेकिन 'घटनाओं' पर पृष्ठ पर एक नज़र डालें: कॉलबैक का उपयोग करके प्रोग्रामेटिक रूप से नियंत्रित विजेट के लिए एक उदाहरण है। तो सिद्धांत रूप में, आपके पास एक बटन हो सकता है, जो क्लिक करने पर सिर्फ 'फॉर' लूप चलाता है जो स्लाइडर/नियंत्रण को समायोजित करता है, और बीच में सोता है। इसका नियंत्रण किसी के नियंत्रण में मैन्युअल रूप से 'स्लाइडिंग' का प्रभाव होगा। लेकिन यह आदर्श नहीं है। – Luciano

5

IPython widgets आपको नोटबुक में जीयूआई ऑब्जेक्ट्स के साथ कर्नेल में पायथन ऑब्जेक्ट्स में हेरफेर करने दें। आपको ऋषि hosted IPython Notebooks भी पसंद हो सकता है। नोटबुक में विगेट्स या इंटरएक्टिविटी साझा करने के साथ आपके पास एक समस्या यह है कि अगर किसी और के पास आईपीथन नहीं है, तो वे आपका काम नहीं चला सकते हैं। इसे हल करने के लिए, आप डोमिनोज़ को share Notebooks पर विगेट्स के साथ उपयोग कर सकते हैं जो अन्य चला सकते हैं।

नीचे दिए गए विगेट्स के तीन उदाहरण हैं जिन्हें आप डेटा, फ्रैक्टल और 3 डी प्लॉट के लिए स्लाइडर फ़िल्टर करने के लिए पांडा का उपयोग करके नोटबुक में बना सकते हैं। और जानें और कोड और नोटबुक here देखें।




enter image description here




enter image description here




enter image description here




आपको लाइव-स्ट्रीम डेटा या एक पाश के रूप में चलाने के लिए एक सिमुलेशन स्थापित करना चाहते हैं, तो आप भी stream data एक नोटबुक में भूखंडों में कर सकते हैं । अस्वीकरण: मैं पूरी तरह से काम करता हूं।

0

@ गोगर की 'भयानक झिलमिलाहट' की टिप्पणी पर, मैंने पाया कि clear_output (प्रतीक्षा = सही) को कॉल करने से मेरी समस्या हल हो गई। ध्वज प्रस्तुत करने के लिए clear_output को बताता है जब तक कि इसे प्रस्तुत करने के लिए कुछ नया न हो।

1

bqplot अब ऐसा करने का एक अच्छा विकल्प है। विशेष रूप से एनीमेशन के लिए अपने बनाया अजगर के माध्यम से नोटबुक

https://github.com/bloomberg/bqplot

0

matplotlib में ऐसा करने के लिए animation मॉड्यूल है। हालांकि, साइट पर प्रदान किए गए उदाहरण एक नोटबुक में नहीं चलेंगे; आपको इसे काम करने के लिए कुछ बदलाव करने की जरूरत है।

यहां नोटबुक में काम करने के लिए संशोधित पृष्ठ का उदाहरण दिया गया है (बोल्ड में संशोधन)।


import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.animation import FuncAnimation 
from matplotlib import rc from IPython.display import HTML 

fig, ax = plt.subplots() 
xdata, ydata = [], [] 
ln, = plt.plot([], [], 'ro', animated=True) 

def init(): 
    ax.set_xlim(0, 2*np.pi) 
    ax.set_ylim(-1, 1) 
    return ln, 

def update(frame): 
    xdata.append(frame) 
    ydata.append(np.sin(frame)) 
    ln.set_data(xdata, ydata) 
    return ln, 

ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128), init_func=init, blit=True) rc('animation', html='html5') ani # plt.show() # not needed anymore 

ध्यान दें कि नोटबुक में एनीमेशन एक फिल्म के माध्यम से और आप ffmpeg इंस्टॉल होना चाहिए और इसका इस्तेमाल करने के लिए कॉन्फ़िगर matplotlib जरूरत है कि किया जाता है।

संबंधित मुद्दे