2009-02-18 9 views
11

Visto somesuggestions para gráficos, me pregunto cuál es el óptimo para mi problema.Gráfico optimizado para la web

Quiero representar un gráfico dirigido a un servlet/imagen que se muestra en el navegador. Debería haber algún tipo de optimización de posición. No se prefiere ninguna dependencia a Swing. Los algoritmos no son importantes, ya que la estructura del gráfico está determinada por la lógica comercial. Sería deseable poder agregar etiquetas a los bordes también. sería óptimo si puedo servir esto como png/svg.

¿Qué biblioteca/servicio recomendaría?

aclaraciones:

1) La pregunta es todo acerca de los gráficos - como Directed Acyclic Graph - NO - Charts.

2) flot, Google Charts - no se pueden trazar gráficos, solo gráficos, o me he perdido algo?

3) No, yo no necesito interactividad

4) graphviz estaría bien, pero la biblioteca grappa Java es bastante anticuado y se basa en swing/AWT. aunque teóricamente es posible hacer swing a las imágenes, no sería mi forma favorita de hacerlo en una aplicación de servidor.

5) estaría bien utilizar un servicio en línea donde las imágenes no están alojadas localmente.

de edición: añadido enlaces a Wikipedia para aclarar plazo Gráfico/gráfico de

Respuesta

3

Además de esperar semanas para saber sobre el Marco mágico que va a resolver todos tus problemas en una línea de código, también existe la otra opción de Escribir Cierto Código para hacer exactamente lo que quieras ... (No digo que sean 10 minutos de trabajo, pero probablemente sean uno o dos días, y usted publicó su pregunta hace más de dos semanas ...)

¿Ha echado un vistazo, por ejemplo, a la entrada de Wikipedia en Force-based algorithms - tiene pseudocódigo y algunos enlaces que pueden ser útiles.

Supongo que es el problema del algoritmo de diseño, y no la cuestión de crear una Imagen Buffered, dibujar en su contexto de gráficos, codificar PNG y enviarlo por el socket. Realmente no necesita un marco para que poco, no creo.

+6

estado allí, hecho eso. Si realmente crees que alguien puede implementar un diseño robusto dirigido por la fuerza en solo 2 días, y terminar con algo remotamente a la par con JViews o yFiles (y mucho menos aiSee), entonces eres un soñador. Es como volver a implementar Google Search en lugar de simplemente usarlo. –

+0

Así que mi estimo es más que alguien acostumbrado a implementar algoritmos debería obtener algo * aceptable * y "hacer lo que quieran" en un par de días (el cartel menciona que quiere "algún tipo de optimización", pero el problema de integrarse en su proyecto también fue importante). –

+0

La solución que pretendo es escribir un contenedor para Prefuse que emita png desde uno de mis servlets. No tengo planes de escribir algoritmos que hagan un diseño de gráficos planos por mi cuenta. –

0

Tal vez echa un vistazo a Google Charts?

+1

no es una mala sugerencia: http://code.google.com/apis/chart/docs/gallery/graphviz.html – bergin

8

Tome un vistazo a graphviz

+0

Es posible que desee agregar los detalles que runako proporciona –

-2

JFreeChart puede ser la forma en que desea ir, pero se hace una distinción entre Gráficos y Gráficos. Quizás puedas explicar a qué te refieres con eso. Usualmente he usado estos términos como sinónimos. :)

JFreeChart tiene buenos gráficos de dispersión, barra y línea, así como divertidos como Pie y Marcar, así que tal vez funcione para usted.

+0

enlaces adicionales a la pregunta para aclarar la diferencia gráfico/gráfico –

+0

Eso tiene sentido. Bueno, aiSee, sugerido por RegDwight parece una buena opción, sin embargo, parece ser propietario. No estoy seguro si esto es kosher con tu situación o no. – Drew

5

¿Qué tal el componente dot de Graphviz? Produce gráficos (no gráficos), salidas a PNG y SVG, y admite bordes de etiquetado. Puede pagar a punto para generar la imagen que necesita y devolver una etiqueta img que haga referencia a eso. Alternativamente, puede devolver una etiqueta img que haga referencia a una URL que generará el gráfico requerido (o recuperará una copia en caché).Aquí está la información de puntos:

http://www.graphviz.org/pdf/dotguide.pdf

También puede echar un vistazo a WebDot, que está aparentemente diseñado para este propósito:

http://www.graphviz.org/webdot/

0

Usted puede utilizar SVG en combinación con batik. Lo he usado varias veces para mostrar gráficos. Batik con Java 1.5 es muy rápido. Con esta solución puede programar su gráfica en Java sin dependencia de Swing. Puede agregar etiquetas donde desee, alojarlo como un servlet y mostrarlo como png o svg.

Puede crear los gráficos en SVG (este es un documento XML).
Utiliza Batik para transformar el documento SVG en una imagen PNG/JPG.
Puede usar un servlet para transmitir esta imagen al navegador.

En Java se crea un documento SVG (= XML). Las muestras para gráficos SVG se pueden encontrar aquí: Directed graph y aquí: Simple directed graph

+0

La primera muestra ha sido graficada con GraphViz. El segundo con Inkscape. ¿Tiene algún consejo para el diseño de gráficos Java antes de llamar a Batik para renderizar? – dolmen

+0

La forma en que se crea el diseño depende del tipo/tipo de gráfico que desee construir. Mis gráficos estaban muy estructurados y podrían calcularse usando una cuadrícula con coordenadas x, y. Creé métodos para addNode y connectNodes que hicieron algunos cálculos. – Edwin

0

Ver this question, especialmente la respuesta de Stephan sobre el prefuse. Leí que no necesitas interactividad, pero prefijar aún puede ser útil.

1

JPGD es un analizador de Graphviz en Java. Es un pequeño abandonado, pero el código es bueno y claro, y si encuentra errores, estoy seguro de que el autor aceptaría correcciones contribuidas.

Aunque se anuncia como un analizador sintáctico, también es un generador. Puede construir Gráficos como colecciones de objetos Nodo y Borde, luego obtener .dot usando Graph.toString(). Conseguir esto como un gráfico sería un simple depósito al ejecutable Graphviz dot.

Alternativamente, dot es muy fácil de generar usted mismo. En el caso más simple, es sólo una cuestión de escribir un encabezado en maceta

digraph myGraph { 

... seguido de una definición de los bordes por filo

node1 -> node2 ; 

... seguido de una llave de cierre

} 
1

así que tomé alook en todas las respuestas y enlaces, parece que Prefuse/Flare lo hará con la mejor elección. tienen visalizaciones muy atractivas, además de que han incorporado soporte para gráficos.

3

Para servidor, pruebe JUNG, puede ejecutarlo contra Batik y producir hermosos archivos SVG o PNG. JUNG tiene un diseño agradable y muy potentes algoritmos de diseño ...

Además, dado que usted menciona que "que estaría bien utilizar un servicio en línea ", graphviz proporcionar un servicio llamado webdot para hacer gráficos.

Hay otros en esta línea también ... p. http://graph.gafol.net/ (parece estar abajo) lateral

Cliente:

  • Trate http://arborjs.org/ para una biblioteca mínima (más o menos) se dedica a diseño, utilice esto es que usted tiene gusto a preferir sus propias rutinas de renderización (div, lienzo, svg, paper.js, procesamiento ... etc.).

  • También me gusta http://sigmajs.org/ de un enfoque más completo, construido en soporte táctil, plugins, formatos de archivo, etc.

2

Curiosamente, el proyecto Eclipse tiene un/JFace componente/marco SWT capaz de mostrar y generar (importación/exportación) formato de Graphviz 'DOT', en Java puro:

ZEST (home page & download links)

Ver http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest de ejemplos de uso.

Aunque ZEST se promociona como un plugin de Eclipse, parece que las API de manipulación de DOT se pueden usar de manera independiente o independiente de una instalación de Eclipse.

Saludos

ricos

2

Puede intentar sigma.js: http://sigmajs.org/

Es una biblioteca ligera, de código abierto en Javascript para visualizar las gráficas grandes en la Web.

+0

Biblioteca realmente genial, gracias – Kerb

3

Creamos mxGraph para tales requisitos. Realmente lo lanzamos en 2006, pero nos tomó un tiempo darnos cuenta de esta pregunta ...

Cuestiones relacionadas