A biblioteca matplotlib é muito capaz, mas carece de interatividade, especialmente dentro do Jupyter Notebook. Eu gostaria de um bom desligada ferramenta como plotagem plot.ly .
A biblioteca matplotlib é muito capaz, mas carece de interatividade, especialmente dentro do Jupyter Notebook. Eu gostaria de um bom desligada ferramenta como plotagem plot.ly .
Respostas:
Existe uma biblioteca impressionante chamada MPLD3 que gera gráficos D3 interativos.
Esse código produz um gráfico interativo em HTML do popular conjunto de dados da íris, compatível com o Jupyter Notebook. Quando o pincel é selecionado, ele permite selecionar um subconjunto de dados a serem destacados entre todos os gráficos. Quando a seta cruzada é selecionada, permite passar o mouse sobre o ponto de dados e ver informações sobre os dados originais. Essa funcionalidade é muito útil ao fazer análise exploratória de dados.
importar matplotlib.pyplot como plt importar numpy como np importar pandas como pd importação marítima como sb importar mpld3 dos plugins de importação do mpld3 % matplotlib inline iris = sb.load_dataset ('iris') de sklearn.preprocessing import StandardScaler X = pd.get_dummies (íris) X_scal = StandardScaler (). Fit_transform (X) dim = 3 sklearn.decomposition import PCA pca = PCA (n_components = dim) Y_sklearn = pca.fit_transform (X_scal) # Defina algumas CSS para controlar nossos rótulos personalizados css = "" " tabela { colapso da fronteira: colapso; } º { cor: #ffffff; cor de fundo: # 000000; } td { cor de fundo: #cccccc; } mesa, th, td { família de fontes: Arial, Helvetica, sans-serif; borda: 1px preto sólido; alinhamento de texto: direita; } "" " fig, ax = plt.subplots (dim, dim, figsize = (6,6)) fig.subplots_adjust (hspace = 0,4, wspace = 0,4) dica = [Nenhuma] * fraca N = 200 índice = np.random.choice (intervalo (Y_sklearn.shape [0]), tamanho = N) para m na faixa (fraca): para n na faixa (m + 1): ax [m, n] .grid (Verdadeiro, alfa = 0,3) dispersão = ax [m, n] .scatter (Y_sklearn [índice, m], Y_sklearn [índice, n], alfa = 0,05) labels = [] para i no índice: label = X.ix [[i],:]. T.astype (int) label.columns = ['Linha {0}'. formato (X.index [i])] labels.append (str (label.to_html ())) ax [m, n] .set_xlabel ('Componente' + str (m)) ax [m, n] .set_ylabel ('Componente' + str (n)) #ax [m, n] .set_title ('Dicas de ferramentas HTML', tamanho = 20) dica de ferramenta [m] = plugins.PointHTMLTooltip (dispersão, rótulos, voffset = 20, hoffset = 20, css = css) plugins.connect (fig, dica de ferramenta [m]) plugins.connect (fig, plugins.LinkedBrush (dispersão)) teste = mpld3.fig_to_html (fig = fig) com aberto ("Output.html", "w") como arquivo de texto: text_file.write (teste)
Atualização [9 de julho de 2016]: Acabei de descobrir que o Plot.ly tem um modo offline e agora é de código aberto. Ele possui muitos sinos e assobios pré-embalados, mas o MPLD3 ainda pode ser apropriado em alguns casos.
Eu preferiria que isso fosse um comentário em vez de uma resposta, pois minha intenção não é publicar / anunciar, mas atualmente estou trabalhando em minha tese que pode ser do seu interesse, pois faz o que você deseja. Na realidade, é uma ferramenta de visualização de cluster, mas se você usar k-means com k = 1, terá um gráfico interativo onde poderá procurar termos, selecionar uma área e ver o conteúdo de cada nó e outras coisas. Dê uma olhada e veja se funciona para você!
Uma escolha muito boa, o enredo é ...
No meu caso, eu estava tentando traçar uma designação semelhante com base nas habilidades, onde habilidades era uma incorporação word2vec de 300 dimensões; trouxe-o para um espaço vetorial de 3 dimensões e, usando o Scatter3D, consegui plotar um gráfico de dispersão 3D para o mesmo.
Et Viola !! Possui um gráfico impressionante de três dimensões, com funcionalidade de passar o mouse e ampliar. E a melhor parte é que ele pode ser exportado como um arquivo html, tornando-o um plug and play adequado para qualquer outro PC, basta arrastar e soltar em um navegador (incluído no código abaixo).
Pode qualquer coisa ABELHA mais simples
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
(exemplos em github.com/ipython/ipywidgets/blob/master/docs/source/examples /… ) Oubokeh
( bokeh.pydata.org/en/latest ).