matplotlibののライブラリは非常に可能であるが、特にJupyterノートブック内で、インタラクティブに欠けています。plot.lyのような優れたオフラインプロットツールが欲しいのですが。
matplotlibののライブラリは非常に可能であるが、特にJupyterノートブック内で、インタラクティブに欠けています。plot.lyのような優れたオフラインプロットツールが欲しいのですが。
回答:
インタラクティブなD3プロットを生成するMPLD3と呼ばれる素晴らしいライブラリがあります。
このコードは、Jupyter Notebookと互換性のある人気のあるirisデータセットのHTMLインタラクティブプロットを生成します。ペイントブラシを選択すると、すべてのプロットで強調表示するデータのサブセットを選択できます。十字矢印を選択すると、データポイントにマウスを合わせて、元のデータに関する情報を表示できます。この機能は、探索的データ分析を行うときに非常に役立ちます。
matplotlib.pyplotをpltとしてインポートする
npとしてnumpyをインポートする
パンダをpdとしてインポート
シーボーンをsbとしてインポート
mpld3のインポート
mpld3インポートプラグインから
%matplotlibインライン
アイリス= sb.load_dataset( 'iris')
sklearn.preprocessingからインポートStandardScaler
X = pd.get_dummies(iris)
X_scal = StandardScaler()。fit_transform(X)
薄暗い= 3
sklearn.decompositionからインポートPCA
pca = PCA(n_components = dim)
Y_sklearn = pca.fit_transform(X_scal)
#カスタムラベルを制御するCSSを定義します
css = "" "
テーブル
{
border-collapse:折りたたみ。
}
番目
{
色:#ffffff;
背景色:#000000;
}
td
{
background-color:#cccccc;
}
table、th、td
{
font-family:Arial、Helvetica、sans-serif;
ボーダー:1ピクセルの黒一色。
text-align:右;
}
「」
イチジク、ax = plt.subplots(dim、dim、figsize =(6,6))
fig.subplots_adjust(hspace = .4、wspace = .4)
tooltip = [なし] *暗い
N = 200
インデックス= np.random.choice(range(Y_sklearn.shape [0])、size = N)
範囲(薄暗い)のmの場合:
範囲(m + 1)のnの場合:
ax [m、n] .grid(True、alpha = 0.3)
散布図= ax [m、n] .scatter(Y_sklearn [index、m]、Y_sklearn [index、n]、alpha = .05)
ラベル= []
索引のi:
ラベル= X.ix [[i]、:]。T.astype(int)
label.columns = ['行{0}'。format(X.index [i])]
labels.append(str(label.to_html()))
ax [m、n] .set_xlabel( 'コンポーネント' + str(m))
ax [m、n] .set_ylabel( 'コンポーネント' + str(n))
#ax [m、n] .set_title( 'HTML tooltips'、size = 20)
tooltip [m] = plugins.PointHTMLTooltip(scatter、labels、
voffset = 20、hoffset = 20、css = css)
plugins.connect(fig、tooltip [m])
plugins.connect(fig、plugins.LinkedBrush(scatter))
テスト= mpld3.fig_to_html(fig = fig)
open( "Output.html"、 "w")をtext_fileとして:
text_file.write(test)
更新[2016年7月9日]:Plot.lyにオフラインモードがあり、現在はオープンソースであることがわかりました。それはたくさんのベルとホイッスルがあらかじめパッケージ化されていますが、MPLD3はまだいくつかのケースで適切かもしれません。
私はこれが答えではなくコメントであることを望みます。私の意図はプラグイン/アドバタイズではないからです。しかし、私は現在、あなたの興味を引くかもしれない私の論文に取り組んでいます。実際にはクラスタリングの視覚化ツールですが、k = 1でk-meansを使用すると、用語の検索、エリアの選択、各ノードのコンテンツの表示など、インタラクティブなプロットが得られます。見て、それがあなたのために働くかどうか見てください!
非常に細かい選択、プロットは...
私の場合、スキルに基づいて同様の指定をプロットしようとしていましたが、スキルは300次元のword2vec埋め込みでした。それを3次元のベクトル空間に持ち込み、plotly Scatter3Dを使用して、同じ3D散布図をプロットできました。
エビオラ!! ホバーと拡大機能を備えた素晴らしい3次元グラフを手に入れました。そして、最も良い部分は、それをhtmlファイルとしてエクスポートできることです。プラグアンドプレイを他のPCに適したものにして、ブラウザーにドラッグアンドドロップするだけです(以下のコードに含まれています)。
BEEはもう簡単にできますか
from plotly.offline import plot
from plotly.graph_objs import *
import numpy as np
# x = np.random.randn(2000)
# y = np.random.randn(2000)
# Instead of simply calling plot(...), store your plot as a variable and pass it to displayHTML().
# Make sure to specify output_type='div' as a keyword argument.
# (Note that if you call displayHTML() multiple times in the same cell, only the last will take effect.)
p = plot(
[
Scatter3d(x=skills_df[0], y=skills_df[1], z=skills_df[2], text= skills_df['designation'], mode='markers', marker=Marker(color=skills_df['cluster_number'], size=3, opacity=0.5, colorscale='Viridis'))
],
output_type='div'
# filename='/dbfs/FileStore/tables/lnkdn_jobroles_viridis.html' turn it on to save the file
)
ipywidgets(github.com/ipython/ipywidgets/blob/master/docs/source/examplesの例/…)またはbokeh(bokeh.pydata.org/en/latest)。