2010-11-29 16 views
8
  1. ¿Alguien ha encontrado una forma de modificar objetos Graph en Mathematica 8? En particular, cómo obtener la misma funcionalidad que obtienes cuando haces clic derecho en el gráfico.nuevo Gráfico en Mathematica 8.0

  2. Algunas de las nuevas funciones del gráfico entran en conflicto con Combinatorica, ¿hay alguna manera de forzar a Mathematica a utilizar una versión incorporada de la función? En otras palabras, ¿hay alguna manera de obtener acceso al built-in CompleteGraph después de que lo hago Needs["Combinatorica"] que importa la versión de Combinatorica de CompleteGraph?

Aclarar 1, menú contextual de gráfico le permite cambiar GraphStyle y GraphLayout, y me gustaría ser capaz de cambiar mediante programación. He aquí una manera que encontré para cambiar GraphStyle del gráfico de objetos

g = GridGraph[{4, 4}]; 
BooleanGraph[Or, g, g, GraphStyle -> "DiagramBlack"] 

Sin embargo, que se olvida de las opciones de la gráfica original, como VertexCoordinates

Tratando receta de Brett en el gráfico de la red

g = GridGraph[{3, 2}, ImageSize -> Tiny] 
coords = PropertyValue[{g, #}, VertexCoordinates] & /@ VertexList[g]; 
Graph[EdgeList[g], GraphStyle -> "BasicGold", 
VertexCoordinates -> coords, ImageSize -> Tiny] 

http://yaroslavvb.com/upload/save/mathematica-change-style.png

Parece que hay un error con la forma en que Mathematica maneja las coordenadas del gráfico en las operaciones de gráfico. La primera línea a continuación permuta las coordenadas, la segunda da una advertencia interna, probablemente relacionada con las coordenadas. El uso de vértices no enteros y coordenadas explícitas para cada vértice no ayuda. Una solución es almacenar las coordenadas en todo el mundo y tienen fixCoordinates función para reasignar las coordenadas correctas para Graph después de las modificaciones

VertexDelete[GridGraph[{3, 3}], 1] 
NeighborhoodGraph[VertexDelete[GridGraph[{3, 3}], 1], 2] 
+2

Re. 2 .: System'CompleteGraph? –

+0

Re # 2, podría eliminar Combinatorica de su ruta de contexto; luego, consulte todas las funciones de Combinatorica con la ruta completa explícita ... – Simon

+0

¿cómo se elimina de la ruta de contexto? –

Respuesta

14

Los nuevos objetos Graph son atómicos en Mathematica 8. Por lo tanto, al igual que las cadenas o las imágenes, no tienen una estructura interna que pueda manipularse de la manera normal. Lo que es particularmente inusual es que los nuevos objetos tienen un FullForm que parece como si se pudiera manipular simbólicamente. Pero las apariencias pueden ser engañosas: no solo esa representación es inaccesible para la coincidencia de patrones, sino que ni siquiera es una especificación gráfica válida si la vuelves a enviar a Mathematica usando copiar y pegar.

Encontré un par de hacks que se pueden utilizar para manipular la estructura del gráfico.Los primeros intentos de utilizar los canales "oficiales" para extraer las propiedades de gráficos:

adjustedGraph[g_, newOptions___] := 
    Graph[ 
    [email protected], 
    [email protected], 
    newOptions, 
    [email protected]@Table[p -> PropertyValue[g, p], {p, PropertyList[g]}] 
    ] 

Puede utilizar esta función como esta:

g = GridGraph[{4, 4}, GraphStyle -> "DiagramBlack", ImageSize -> Tiny] 
adjustedGraph[g, GraphStyle -> "BasicGold"] 

Esta función utiliza VertexList, EdgeList y PropertyValue para extraer las propiedades del gráfico. Desafortunadamente, algunas opciones no son recuperables por este medio. Por ejemplo, la opción GraphicsImageSize se perderá con este método.

Un truco aún más atroz explota la representación simbólica de la pseudo-fullform:

adjustedGraph2[g_, newOptions___] := 
    "[email protected]" ~~ ToString[g, InputForm] // 
    ToExpression // 
    #[[1, 3]] & // 
    Graph[[email protected], [email protected], newOptions, Sequence @@ #] & 

A pesar de su naturaleza maligna, esta segunda función realiza de manera más satisfactoria, ya que parece conservar la mayoría de las opciones de gráficos. Digo "la mayoría", porque todavía no he experimentado con más opciones esotéricas como envoltorios, funciones de forma y propiedades de gráficos asignadas después del hecho. No hay garantías de que este método funcione sin cambios ya que Wolfram cambia la representación de los objetos gráficos (o incluso que ahora funciona para todas las definiciones de gráficos posibles).

Debe haber una manera de lograr esto sin hacks. Todavía espero que exista alguna función al acecho que proporcione la representación simbólica completa de un objeto gráfico.

En cuanto a los conflictos de símbolos que surgen después de cargar el paquete Combinatorica, puede acceder a los símbolos originales especificando explícitamente el nombre del paquete, p. System`CompleteGraph. Si usted prefiere tener el sistema de símbolos tienen prioridad sobre los símbolos Combinatorica, se podría evaluar la siguiente expresión para cambiar el orden de búsqueda de paquetes:

$ContextPath = 
    $ContextPath /. 
    {x___, c : "Combinatorica`", y___, s:"System`", z___} :> {x, y, s, c, z} 

observo que Wolfram se deprecating efectivamente el paquete Combinatorica mediante la emisión de una advertencia de miedo mensaje cuando carga el paquete.

+0

Parece que funciona para los contenedores también –

+0

Excelente información. +1 –

3

Para # 2, usted debería ser capaz de utilizar distinguir entre los dos utilizando el contexto. Por lo tanto, System`CompleteGraph[5] crea un nuevo gráfico V8, mientras que Combinatorica`CompleteGraph[5] crea un antiguo gráfico Combinatorica.

No estoy seguro de lo que quiere decir en el n. ° 1, pero puede convertir el Gráfico en Gráficos, luego el menú contextual aparecerá como antes. Aunque no estoy tan seguro de que esto sea una mejora.

4

Lo siguiente conservará las coordenadas de los vértices del gráfico original.

g = CompleteGraph[5]; 
coords = PropertyValue[{g, #}, VertexCoordinates] & /@ VertexList[g]; 
Graph[VertexList[g], EdgeList[g], GraphStyle -> "BasicGold", 
VertexCoordinates -> coords] 

Mathematica graphics

yo creo que algo similar podría preservar otras opciones también, aunque no lo he probado.

+0

Parece que cambia el orden de los vértices, actualizado con el ejemplo –

+0

Este comportamiento parece similar al GraphPlot que a veces termina permutando el orden de los vértices http://stackoverflow.com/questions/4245946/vertexcoordinate-rules-and-vertexlist-from-graphplot-graphic/4250069 # 4250069 –

+0

Se actualizó la respuesta para no permutar los vértices de GridGraph. –

Cuestiones relacionadas