Skip to content

Instantly share code, notes, and snippets.

@tanemaki
Last active August 29, 2015 14:17
Show Gist options
  • Select an option

  • Save tanemaki/904ffaa754c0e3481741 to your computer and use it in GitHub Desktop.

Select an option

Save tanemaki/904ffaa754c0e3481741 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"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