Pregunta

Este es un reto muy específico inforgraphic Altough la cuestión fundemental es, ¿cómo construir arcos de entre las palabras usando matplotlib, cario o un libary otro pitón.

Dado un la siguiente estructura de datos.

yo, tú, 7 | mí, manzana, 9 | manzana, usted, 1 | moto, yo, 5

Los nombres se muestran en horizontal con los nombres de las mayoría de las relaciones de mayor tamaño que los otros y los arcos de entonces no habría ponderada entre los nombres. A 10 arco ponderado sería dos veces tan gruesa como un arco ponderado 5.

La inspiración viene de: diverstiy similar. http://similardiversity.net/

Deja que el reto comenzar!

¿Fue útil?

Solución

Hay varias bibliotecas, al menos uno de los cuales se basa en Matplotlib, que va a hacer lo que desee. Recomiendo NetworkX (www.networkx.lanl.gov) para construir su estructura gráfica, y que luego se puede utilizar para llamar a los métodos pertinentes para trazar matplotlib. NetworkX y Matplotlib funcionan muy bien juntos.

import networkx as NX
import matplotlib.pyplot as PLT
Gh = NX.Graph()
Gh.add_edge("You", "Bike", weight=1.0)
Gh.add_edge("Bike", "Apple", weight=0.9)
Gh.add_edge("Me", "Bike", weight=1.1)
all_nodes = Gh.nodes()
# to scale node size with degree:
scaled_node_size = lambda(node) : NX.degree(Gh, node) * 700
position = NX.spring_layout(Gh)    # just choose a layout scheme
NX.draw_networkx_nodes(Gh, position, node_size=map(scaled_node_size, all_nodes))
NX.draw_network_edges(Gh, position, Gh.edges(), width=1.0, alpha=1.0, edge_color="red")
# now for the Matplotlib part:
PLT.axis("off")
PLT.show()

Como se puede ver, se puede escalar los bordes mediante la aplicación de un factor de variar el parámetro 'peso' a cualquiera de los métodos de 'borde', de la misma manera como lo hice para el escalado de nodo.

Yo también lo recomendaría pygraphviz (obviamente usando graphviz como su back-end). Es muy similar a Netwworkx (mismo desarrollador de plomo).

Otros consejos

matplotlib no es la biblioteca de aquí, ya que no es una librería gráfica de propósito general. Lo que hay aquí es bien algo así como Cairo , o mucho más simple, se puede hacer con las capacidades gráficas de cualquier juego de herramientas GUI, tal como PyQt. Otro enfoque es factible PyGame, que tiene buenas capacidades de dibujo también.

Si quieres un ejemplo, consulte esta página muestras Cairo , la primera muestra - de arco. Que acaba de escribir las palabras de texto y luego utiliza el código de arco para un arco de cualquier anchura y color entre ellos.

No veo realmente donde está la dificultad o desafío. Todo lo que necesita es una biblioteca de gráficos que se pueden dibujar texto y semicírculos, que es posible en casi todo. No hay ninguna necesidad de que las curvas de Bézier. Por ejemplo, podría crear simplemente un archivo SVG (entonces usted ni siquiera necesita cualquier biblioteca y bien puede integrar esto en una página web y utilizar un poco de Javascript para que sea interactivo).

El trazado real es simple: el centro de un círculo está en el medio entre las dos palabras, el radio es la mitad de la distancia entre ellos. A continuación, puede ajustar la carrera para reflejar otras cantidades.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top