Created
May 19, 2020 14:34
-
-
Save mxl00474/b35ba7a48667265e8551ad20dc2f909a to your computer and use it in GitHub Desktop.
matplotlibを使ってJupyterLab上で動く3Dグラフを作成する
This file contains 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": [ | |
"## 1. Import" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 1, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"%matplotlib widget\n", | |
"import matplotlib.pyplot as plt\n", | |
"from mpl_toolkits.mplot3d import Axes3D\n", | |
"from matplotlib.widgets import Slider\n", | |
"import numpy as np" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 2. 表示するデータを作成(例として$z=x^2+2 y^2$を表示) " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 12, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"x = y = np.arange(-20, 20, 0.5)\n", | |
"X, Y = np.meshgrid(x, y)\n", | |
"Z = X*X + 2 * Y*Y" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"## 3. グラフを表示" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 11, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"data": { | |
"application/vnd.jupyter.widget-view+json": { | |
"model_id": "010e0fd6100046d7943756d2b6b2f8a1", | |
"version_major": 2, | |
"version_minor": 0 | |
}, | |
"text/plain": [ | |
"Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"# Figureの設定\n", | |
"fig = plt.figure(figsize=(5,5))\n", | |
"\n", | |
"# Figureの中に3Dグラフ、Slider用のAxesを追加\n", | |
"axcolor = 'gold'\n", | |
"gs = fig.add_gridspec(20, 20)\n", | |
"ax1 = fig.add_subplot(gs[:17,:], projection='3d')\n", | |
"ax_slider_z = fig.add_subplot(gs[18,:], facecolor=axcolor)\n", | |
"ax_slider_xy = fig.add_subplot(gs[19,:], facecolor=axcolor)\n", | |
"\n", | |
"# Sliderの設定\n", | |
"z0 = 0\n", | |
"xy0 = 0\n", | |
"delta = 10\n", | |
"slider_z = Slider(ax_slider_z, 'z-axis', -180, 180, valinit=z0, valstep=delta)\n", | |
"slider_xy = Slider(ax_slider_xy, 'xy-axis', -180, 180, valinit=xy0, valstep=delta)\n", | |
"\n", | |
"# 3Dグラフの見る方向の初期値を設定\n", | |
"ax1.view_init(elev=z0, azim=xy0)\n", | |
"\n", | |
"# 3Dグラフを表示\n", | |
"ax1.plot_surface(X, Y, Z)\n", | |
"\n", | |
"# Sliderを動かした時に呼ばれるコールバック関数\n", | |
"def view_change(val):\n", | |
"\n", | |
" sz = slider_z.val\n", | |
" sxy = slider_xy.val\n", | |
" ax1.view_init(elev=sxy, azim=sz)\n", | |
" fig.canvas.draw_idle() \n", | |
"\n", | |
"slider_z.on_changed(view_change)\n", | |
"slider_xy.on_changed(view_change)\n", | |
"\n", | |
"plt.show()" | |
] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"language": "python", | |
"name": "python3" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 3 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython3", | |
"version": "3.6.8" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment