Matplotlib biblioteka jest bardzo zdolny, ale brakuje interaktywność, zwłaszcza wewnątrz Jupyter notebooka. Chciałbym dobro nieaktywny kreślenia narzędzie jak plot.ly .
Matplotlib biblioteka jest bardzo zdolny, ale brakuje interaktywność, zwłaszcza wewnątrz Jupyter notebooka. Chciałbym dobro nieaktywny kreślenia narzędzie jak plot.ly .
Odpowiedzi:
Istnieje niesamowita biblioteka o nazwie MPLD3, która generuje interaktywne wykresy D3.
Ten kod tworzy interaktywny wykres HTML popularnego zestawu danych tęczówki, który jest zgodny z Jupyter Notebook. Po wybraniu pędzla umożliwia wybranie podzestawu danych, który zostanie wyróżniony wśród wszystkich wykresów. Po wybraniu strzałki krzyżowej można najechać myszką na punkt danych i wyświetlić informacje o oryginalnych danych. Ta funkcja jest bardzo przydatna podczas analizy danych eksploracyjnych.
zaimportuj matplotlib.pyplot jako plt zaimportuj numpy jako np importuj pandy jako pd import dna morskiego jako sb import mpld3 z wtyczek importu mpld3 % inline matplotlib iris = sb.load_dataset („iris”) z sklearn.preprocessing import StandardScaler X = pd.get_dummies (tęczówka) X_scal = StandardScaler (). Fit_transform (X) dim = 3 z sklearn.decomposition import PCA pca = PCA (n_components = dim) Y_sklearn = pca.fit_transform (X_scal) # Zdefiniuj trochę CSS, aby kontrolować nasze niestandardowe etykiety css = "" " stół { border-collapse: collapse; } th { kolor: #ffffff; kolor tła: # 000000; } td { kolor tła: #cccccc; } table, th, td { rodzina czcionek: Arial, Helvetica, sans-serif; obramowanie: jednolity czarny 1px; wyrównanie tekstu: prawo; } „” „ rys. ax = plt. rysunki (dim, dim, figsize = (6,6)) rys.subplots_adjust (hspace = .4, wspace = .4) tooltip = [None] * dim N = 200 index = np.losowy.choice (zakres (Y_sklearn.shape [0]), rozmiar = N) dla mw zakresie (dim): dla nw zakresie (m + 1): ax [m, n] .grid (True, alpha = 0.3) scatter = ax [m, n]. scatter (Y_sklearn [indeks, m], Y_sklearn [indeks, n], alfa = .05) etykiety = [] dla i w indeksie: label = X.ix [[i],:]. T.astype (int) label.columns = ['Row {0}'. format (X.index [i])] labels.append (str (label.to_html ())) ax [m, n] .set_xlabel („Component” + str (m)) ax [m, n] .set_ylabel („Component” + str (n)) #ax [m, n] .set_title („Podpowiedzi HTML”, rozmiar = 20) tooltip [m] = plugins.PointHTMLTooltip (rozproszenie, etykiety, voffset = 20, hoffset = 20, css = css) plugins.connect (rys., etykietka [m]) plugins.connect (rys., plugins.LinkedBrush (scatter)) test = mpld3.fig_to_html (rys. = rys.) z otwartym („Output.html”, „w”) jako plikiem tekstowym: text_file.write (test)
Zobacz to w akcji na moim blogu .
Aktualizacja [9 lipca 2016 r.]: Właśnie dowiedziałem się, że Plot.ly ma tryb offline i jest teraz open source. Ma wiele zapakowanych dzwonków i gwizdków, ale w niektórych przypadkach MPLD3 może nadal być odpowiedni.
Wolałbym, aby był to komentarz zamiast odpowiedzi, ponieważ moim zamiarem nie jest wtyczka / reklama, ale obecnie pracuję nad moją tezą, która może cię zainteresować, ponieważ robi to, co chcesz. W rzeczywistości jest to narzędzie do wizualizacji klastrów, ale jeśli używasz k-średnich z k = 1, masz interaktywny wykres, w którym możesz wyszukiwać terminy, wybierać obszar i widzieć zawartość każdego węzła i inne rzeczy. Zobacz, czy to działa dla Ciebie!
Bardzo dobry wybór, fabuła to ...
W moim przypadku próbowałem wykreślić podobne oznaczenie oparte na umiejętnościach, przy czym umiejętności były osadzone w word2vec o 300 wymiarach; przeniosłem go do trójwymiarowej przestrzeni wektorowej i korzystając z fabularnego Scatter3D, byłem w stanie wykreślić trójwymiarowy wykres rozproszenia dla tego samego.
Et Viola !! Masz niesamowity trójwymiarowy wykres z funkcjami najechania i powiększenia. A najlepsze jest to, że można go wyeksportować jako plik HTML, dzięki czemu można go podłączyć do dowolnego komputera, po prostu przeciągnij i upuść w przeglądarce (zawartej w poniższym kodzie).
Czy coś może być BEE już prostsze
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
(przykłady na github.com/ipython/ipywidgets/blob/master/docs/source/examples /… ) Lubbokeh
( bokeh.pydata.org/en/latest ).