なんでもかんでもJupyter Notebookに表示するためのチートシート　２次元プロット編

# NumPyのndarrayから２次元グラフ
準備するデータはこれ

```py3:Notebook
import numpy as np

x = np.linspace(0, 10)
y1 = np.sin(x)
y2 = np.cos(x) * 2
```


---
## Matplotlib
```py3:Notebook
import matplotlib.pyplot as plt
# Notebook出力には次の１行が必要
%matplotlib inline
                            
plt.figure(figsize=(8, 6))    # グラフのサイズ指定（この行は省略可）
plt.plot(x, y1)
plt.plot(x, y2)
```
![output_1_1.png](https://qiita-image-store.s3.amazonaws.com/0/37701/a72ab109-74a7-d09a-2912-db02761ed121.png)


---
## Bokeh
### bokeh.plottingモジュールの場合
```py3:Notebook
from bokeh.plotting import output_notebook, figure, show
output_notebook()    # <- Notebook出力にはこの１行が必要

fig = figure(width = 600, height=400)    # width, heightは省略可
fig.line(x, y1)
fig.line(x, y2)
show(fig)
```
<img width="618" alt="スクリーンショット 2017-01-28 17.51.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/37701/6dbedcb0-d29b-8c2f-5544-610ef73d5583.png">

Matplotlibに近い感じで覚えやすいけど、色を個別に指定する必要があるのが面倒。
公式ドキュメント：[Plotting with Basic Glyphs](http://bokeh.pydata.org/en/latest/docs/user_guide/plotting.html)


---
### bokeh.chartsモジュールの場合
```py3:Notebook
from bokeh.charts import output_notebook, Line, show
output_notebook()    # <- Notebook出力にはこの１行が必要

chart = Line(data={'x': x, 'y1': y1, 'y2': y2}, x='x',
             width=600, height=400)    # width, heightは省略可
show(chart)
```
<img width="629" alt="スクリーンショット 2017-01-28 17.55.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/37701/008e9ba3-5bcc-2c4c-7be0-c49736c804f9.png">

単純なデータを素早くプロットするには向いていないけど、自動的に軸ラベルやレジェンドが入ったりと気が利いている。
公式ドキュメント：[Making High-level Charts](http://bokeh.pydata.org/en/latest/docs/user_guide/charts.html)


---
### MatplotlibからにBokehに変換
```py3:notebook
import matplotlib.pyplot as plt
from bokeh.plotting import output_notebook, show
from bokeh.mpl import to_bokeh
output_notebook()    # <- Notebook出力にはこの１行が必要

plt.plot(x, y1)
plt.plot(x, y2)
show(to_bokeh())
```
<img width="452" alt="スクリーンショット 2017-02-02 23.49.33.png" src="https://qiita-image-store.s3.amazonaws.com/0/37701/1bcf912c-e128-2195-98f6-994b47dd4ae4.png">

公式ドキュメント：[Leveraging Other Libraries](http://bokeh.pydata.org/en/latest/docs/user_guide/compat.html)


---
## Plotly
### グラフのサイズを指定しない場合
```py3:Notebook
from plotly.graph_objs import Scatter
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode()    # <- Notebook出力にはこの１行が必要

scatter1 = Scatter(x=x, y=y1)
scatter2 = Scatter(x=x, y=y2)
iplot([scatter1, scatter2])    # <- Notebookに出力するにはiplot関数を使う
```
<img width="969" alt="スクリーンショット 2017-02-02 23.40.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/37701/a121440a-c204-cbed-c371-1486f54e7391.png">

公式ドキュメント：[Plotly Offline for IPython Notebooks](https://plot.ly/python/offline/)


---
### グラフのサイズを指定する場合
```py3:Notebook
from plotly.graph_objs import Scatter, Figure, Layout
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode()    # <- Notebook出力にはこの１行が必要

scatter1 = Scatter(x=x, y=y1)
scatter2 = Scatter(x=x, y=y2)
fig = Figure(data=[scatter1, scatter2], layout=Layout(width=600, height=400))
iplot(fig)    # <- Notebookに出力するにはiplot関数を使う
```
<img width="576" alt="スクリーンショット 2017-02-02 23.44.25.png" src="https://qiita-image-store.s3.amazonaws.com/0/37701/e14d47ee-bc29-765d-997c-b3d0c8ac9a4e.png">

公式ドキュメント：[Python Setting Graph Size](https://plot.ly/python/setting-graph-size/)


---
### MatplotlibからPlotlyに変換
```py3:Notebook
import matplotlib.pyplot as plt
from plotly.offline import init_notebook_mode, iplot_mpl
init_notebook_mode()    # <- Notebook出力にはこの１行が必要

plt.plot(x, y1)
plt.plot(x, y2)
iplot_mpl(plt.gcf())    # <- MatplotlibのグラフをNotebookに出力するにはiplot_mpl関数を使う
```
<img width="432" alt="スクリーンショット 2017-02-02 23.50.29.png" src="https://qiita-image-store.s3.amazonaws.com/0/37701/87aa60be-e963-a2be-dcb2-c48e66d33dea.png">


---
# pandasのDataFrameから散布図
Bokehのライブラリに最初からDataFrameになっているサンプルデータが含まれているのでそれを使ってプロットする。

```py3:Notebook
from bokeh.sampledata import iris
df = iris.flowers
df.head()
```
<img width="453" alt="スクリーンショット 2017-02-10 8.04.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/37701/d23d03d1-3a4a-b78c-adb2-55c107cd16e6.png">


---
## Matplotlib
```py3:Notebook
import matplotlib.pyplot as plt
# Notebook出力には次の１行が必要
%matplotlib inline

plt.scatter(df['sepal_length'], df['sepal_width'])
```
![Matplotlib散布図.png](https://qiita-image-store.s3.amazonaws.com/0/37701/04095056-f69c-5bdc-d8ca-1cab76f01885.png)


---
## Bokeh
```py3:Notebook
from bokeh.charts import output_notebook, Scatter, show
output_notebook()    # <- Notebook出力にはこの１行が必要

chart = Scatter(data=df, x='sepal_length', y='sepal_width',
                width=600, height=400)      # width, heightは省略可
show(chart)
```
<img width="620" alt="スクリーンショット 2017-02-10 8.01.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/37701/c2ac0484-fcf5-b890-798a-4a644ce623da.png">

公式ドキュメント：[Making High-level Charts - Scatter Plots](http://bokeh.pydata.org/en/latest/docs/user_guide/charts.html#scatter-plots)


---
## pandas
```py3:Notebook
import matplotlib.pyplot as plt
# Notebook出力には次の１行が必要
%matplotlib inline

df.plot.scatter(x='sepal_length', y='sepal_width')
```
![pandas散布図.png](https://qiita-image-store.s3.amazonaws.com/0/37701/391e3e05-26f5-6f70-6d84-7ccfc0f3a57b.png)

---
## seaborn
###
```py3:Notebook
import seaborn
# Notebook出力には次の１行が必要
%matplotlib inline

seaborn.jointplot(x='sepal_length', y='sepal_width', data=df)
```
![seaborn散布図.png](https://qiita-image-store.s3.amazonaws.com/0/37701/2ffe6134-6762-32ae-1177-985de94660c2.png)


# 参考リンク：
[Pythonの可視化パッケージの使い分け - Qiita](http://qiita.com/alchemist/items/544d45480ce9c1ca2c16)
[なんでもかんでもJupyter Notebookに表示するためのチートシート　３次元プロット編 - Qiita](http://qiita.com/alchemist/items/8b5984393e9b4855a18c)