ZK Zhao
Uso Jupyter Notebook para hacer análisis de conjuntos de datos. Hay muchos gráficos en el cuaderno y algunos de ellos son gráficos en 3D.
Me pregunto si es posible hacer que la trama en 3D sea interactiva, para luego poder jugar con ella con más detalles.
¿Tal vez podamos agregarle un botón? Al hacer clic en él, puede aparecer un gráfico en 3D y las personas pueden hacer zoom, desplazarse, rotar, etc.
Mis pensamientos:
1. matplotlib, %qt
Esto no se ajusta a mi caso, porque necesito continuar con la trama después de la trama 3D. %qt
interferirá con tramas posteriores.
2. mpld3
mpld3
es casi ideal en mi caso, no es necesario reescribir nada, compatible con matplotlib. Sin embargo, solo es compatible con la trama 2D. Y no vi ningún plan trabajando en 3D (https://github.com/mpld3/mpld3/issues/223).
3. bokeh + vistas
No encontré ningún ejemplo real de trama 3d en bokeh
galería. solo encuentro https://demo.bokeh.org/surface3dque utiliza visjs
.
4. ¿Trama 3D de Javascript?
Dado que lo que necesito es solo línea y fuente, ¿es posible pasar los datos a js plot usando js en el navegador para que sea interactivo? (Entonces es posible que también necesitemos agregar el eje 3D). Esto puede ser similar a visjs
y mpld3
.
eldad-a
intentar:
%matplotlib notebook
ver la respuesta de jakevdp aquí
EDITAR para usuarios de JupyterLab:
Siga el instrucciones instalar jupyter-matplotlib
Entonces el comando mágico anterior ya no es necesario, como en el ejemplo:
# Enabling the `widget` backend.
# This requires jupyter-matplotlib a.k.a. ipympl.
# ipympl can be install via pip or conda.
%matplotlib widget
# aka import ipympl
import matplotlib.pyplot as plt
plt.plot([0, 1, 2, 2])
plt.show()
Finalmente, tenga en cuenta la respuesta de Maarten Breddels; En mi humilde opinión ipyvolumen es realmente muy impresionante (¡y útil!).
-
Porque estoy haciendo toneladas de tramas (ver cdn.rawgit.com/cqcn1991/Wind-Speed-Analysis/master/output_HTML/…)
– ZK Zhao
10 de agosto de 2016 a las 7:19
-
Lo siento, pero sigo sin ver el problema. ¿Has probado a ejecutarlo con
notebook
?– eldad-a
16 de agosto de 2016 a las 22:11
-
1. Uso gráficos en 2D y 3D en mi cuaderno. ¿Cómo puedo cambiar entre
%matplotlib notebook
y%matplotlib inline
2. Mi portátil tarda mucho en funcionar (5 minutos). Usando%matplotlib notebook
renderizará imágenes después de que se complete toda la celda, en lugar de después de que se complete una celda.– ZK Zhao
17 de agosto de 2016 a las 6:44
-
Realmente no puedo ayudarlo con información valiosa sobre esto (no he jugado con él en este nivel). Desde la apariencia:
inline
incrusta un png estático generado automáticamente mientrasnotebook
te permite jugar con una imagen a la matplotlib, hasta que presionas el botón “apagar” y cambias a la imagen estática. Habría buscado un comando de “apagado” automático que se colocaría en las figuras donde no necesita el modo interactivo. No sé si esto se implementa en esta etapa.– eldad-a
17 de agosto de 2016 a las 22:23
Oleksii Trekhleb
puedes ir con trama biblioteca. Puede representar gráficos 3D interactivos directamente en Jupyter Notebooks.
Para hacerlo, primero debe instalar Plotly ejecutando:
pip install plotly
También es posible que desee actualizar la biblioteca ejecutando:
pip install plotly --upgrade
Después de eso, en su Jupyter Notebook, puede escribir algo como:
# Import dependencies
import plotly
import plotly.graph_objs as go
# Configure Plotly to be rendered inline in the notebook.
plotly.offline.init_notebook_mode()
# Configure the trace.
trace = go.Scatter3d(
x=[1, 2, 3], # <-- Put your data instead
y=[4, 5, 6], # <-- Put your data instead
z=[7, 8, 9], # <-- Put your data instead
mode="markers",
marker={
'size': 10,
'opacity': 0.8,
}
)
# Configure the layout.
layout = go.Layout(
margin={'l': 0, 'r': 0, 'b': 0, 't': 0}
)
data = [trace]
plot_figure = go.Figure(data=data, layout=layout)
# Render the plot.
plotly.offline.iplot(plot_figure)
Como resultado, se trazará el siguiente gráfico en Jupyter Notebook y podrá interactuar con él. Por supuesto, deberá proporcionar sus datos específicos en lugar de los sugeridos.
Hay una nueva biblioteca llamada ipyvolumen que puede hacer lo que quieras, la documentación muestra demostraciones en vivo. La versión actual no hace mallas ni líneas, pero el maestro del repositorio de git sí lo hace (al igual que la versión 0.4). (Descargo de responsabilidad: soy el autor)
-
bonita biblioteca! usándolo w voila
– Shpiel Meister
25 de diciembre de 2020 a las 21:48
geniomejorador
trama falta en esta lista. He vinculado la página de enlace de python. Definitivamente tiene gráficos 3D animados e interactivos. Y dado que es de código abierto, la mayor parte está disponible sin conexión. Por supuesto que está trabajando con Jupyter
Una solución que se me ocurrió es usar un vis.js instancia en un iframe. Esto muestra un gráfico 3D interactivo dentro de un cuaderno, que todavía funciona en nbviewer. El código visjs se toma prestado del código de ejemplo en el gráfico 3D página
Un pequeño cuaderno para ilustrar esto: manifestación
El código en sí:
from IPython.core.display import display, HTML
import json
def plot3D(X, Y, Z, height=600, xlabel = "X", ylabel = "Y", zlabel = "Z", initialCamera = None):
options = {
"width": "100%",
"style": "surface",
"showPerspective": True,
"showGrid": True,
"showShadow": False,
"keepAspectRatio": True,
"height": str(height) + "px"
}
if initialCamera:
options["cameraPosition"] = initialCamera
data = [ {"x": X[y,x], "y": Y[y,x], "z": Z[y,x]} for y in range(X.shape[0]) for x in range(X.shape[1]) ]
visCode = r"""
<link href="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.css" type="text/css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vis/4.21.0/vis.min.js"></script>
<div id="pos" style="top:0px;left:0px;position:absolute;"></div>
<div id="visualization"></div>
<script type="text/javascript">
var data = new vis.DataSet();
data.add(""" + json.dumps(data) + """);
var options = """ + json.dumps(options) + """;
var container = document.getElementById("visualization");
var graph3d = new vis.Graph3d(container, data, options);
graph3d.on("cameraPositionChange", function(evt)
{
elem = document.getElementById("pos");
elem.innerHTML = "H: " + evt.horizontal + "<br>V: " + evt.vertical + "<br>D: " + evt.distance;
});
</script>
"""
htmlCode = "<iframe srcdoc=""+visCode+"" width="100%" height="" + str(height) + "px" style="border:0;" scrolling='no'> </iframe>"
display(HTML(htmlCode))
Dibujó
Para visualización en 3D pytresjs es la mejor manera de ir probablemente en el portátil. Aprovecha la infraestructura de widgets interactivos del portátil, por lo que la conexión entre JS y python es perfecta.
Una biblioteca más avanzada es bqplot que es una biblioteca de visualización interactiva basada en d3 para el cuaderno iPython, pero solo hace 2D
jing huang
de la trama px.scatter_3d
es la solución más simple que encontré para la animación de gráficos en 3D después de esforzarme con matplotlib sin suerte; puede encontrar un buen ejemplo en esta publicación: ¿Por qué el tamaño de mi diagrama de dispersión de Plotly 3D cambia aleatoriamente?
consulte stackoverflow.com/a/33440743/1204331 intente:
%matplotlib notebook
– eldad-a
9 de agosto de 2016 a las 8:16
@eldad-a Acabo de probarlo, parece bueno. ¿Es posible mezclar
inline
ynotebook
en un cuaderno jupyter?– ZK Zhao
09/08/2016 a las 15:31
¿Cuál fue el código para producir esos bonitos colores verdes?
– CMC Dragonkai
4 de marzo de 2017 a las 16:08
@CMCDragonkai Uso viridis para el mapa de colores
– ZK Zhao
5 de marzo de 2017 a las 10:33
En 2021, pyviz.org/overviews -> más allá de matplotlib le gusta “Plotly es la mejor herramienta para cualquier cosa 3D o interactiva en Python”
– Denis
26 de abril de 2022 a las 16:43