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)。