Last active
August 29, 2015 14:17
-
-
Save tanemaki/904ffaa754c0e3481741 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "## IPythonでインタラクティブな図を作ろう" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "IPythonでインタラクティブな図を作る方法を紹介します。一番簡単なのはインタラクティブなUIを自動的に作成する`interact`関数 (`IPython.html.widgets.interact`) を使う方法です。\n", | |
| "\n", | |
| "* 注1)この記事よりもう少し詳しい説明は [Interactの使い方](http://nbviewer.ipython.org/gist/tanemaki/de772cdbea35db2d9a23#) としてnbviewerにまとめておきましたので、興味のある方はそちらもどうぞ。\n", | |
| "\n", | |
| "* 注2)[この記事のIPython Notebook](http://nbviewer.ipython.org/gist/tanemaki/904ffaa754c0e3481741)はそのままnbviewerからダウンロードできます。インタラクティブな描画を手軽に試したい方はどうぞ。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "最初に必要となるモジュールを読み込みます。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| ":0: FutureWarning: IPython widgets are experimental and may change in the future.\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "from __future__ import print_function\n", | |
| "from IPython.html.widgets import interact, interactive, fixed\n", | |
| "from IPython.html import widgets" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "その上で、まずはインタラクティブに操作したい関数を定義します。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "def f(x):\n", | |
| " print(x)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "次に、`interact`関数の第一引数に操作したい関数を渡し、キーワード引数としてそれっぽい引数(widget abbreviation)を渡します。たったこれだけです。下のコードを実行するとスライダーが現れ、クリクリできて楽しいです。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "0\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "interact(f, x=(-10, 10, 2));" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "んで、上と下はまったく同義。上がwidget abbreviationを渡す方法で、下がwidgetのインスタンスを渡す方法です。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "0\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "interact(f, x=widgets.IntSliderWidget(min=-10, max=10, step=2, value=0));" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "初期値を設定したい場合は`interact`をデコレータとして使います。" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "8\n" | |
| ] | |
| } | |
| ], | |
| "source": [ | |
| "@interact(x=(-10, 10, 2))\n", | |
| "def g(x=8):\n", | |
| " print(x)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "代表的なウィジェットには以下のようなものがあります。`interact`関数のキーワード引数に渡すのは、左側のそれっぽい引数(widget abbreviation)か、右側のwidgetのインスタンスのどちらかです。\n", | |
| "\n", | |
| "| キーワード引数 | ウィジェット |\n", | |
| "|:-- |:--|\n", | |
| "| `True` or `False` | `CheckboxWidget` |\n", | |
| "| `u'こんにちは世界!'` | `TextareaWidget` |\n", | |
| "| 整数を用いた `value` or `(min,max)` or `(min,max,step)` | \t `IntSliderWidget` |\n", | |
| "| 実数を用いた `value` or `(min,max)` or `(min,max,step)` |\t `FloatSliderWidget` |\n", | |
| "| `('orange','apple')` or `{'one':1,'two':2}`|\t`DropdownWidget` |" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "描画と合わせると、さらにクリクリするのが楽しくなります。以下の図は $y = A\\,sin(\\omega x + \\alpha)$ をダイナミックに描画するデモです。$A \\in [0.1, 4.0], \\omega \\in [0.1, 4.0], \\alpha \\in [-\\pi, \\pi]$という3つのパラメータをスライダーで変化させると、それにあわせて図が変化します。こりゃ楽しい!" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": true | |
| }, | |
| "outputs": [], | |
| "source": [ | |
| "%matplotlib inline\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import numpy as np" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": [ | |
| "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\n" | |
| ], | |
| "text/plain": [ | |
| "<matplotlib.figure.Figure at 0x108642c10>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "@interact(amp=(0.1, 4.0, 0.1), omega=(0.1, 4.0, 0.1), phase=(-np.pi, np.pi, 0.1), \n", | |
| " fn = {'sin': np.sin, 'cos': np.cos, 'tan': np.tan})\n", | |
| "def h(amp=1.0, omega=1.0, phase=0.0, fn=np.sin):\n", | |
| " domain=[-np.pi, np.pi]\n", | |
| " x = np.linspace(domain[0], domain[1], 100)\n", | |
| " y = amp * fn(omega * x + phase)\n", | |
| " plt.plot(x, y)\n", | |
| " plt.plot(-phase/omega, 0, 'or')\n", | |
| " plt.xlim(domain)\n", | |
| " plt.ylim([-4, 4])" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 2", | |
| "language": "python", | |
| "name": "python2" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 2 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython2", | |
| "version": "2.7.9" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 0 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment