¿Usar el lenguaje Wolfram para interpretar el lenguaje Wolfram?

Aug 20 2020

Quiero representar gráficamente la relación de todos los fucntions en Mathematica, tal vez utilizando Grapho la fuerza dirigida-gráfico en D3.js

k = 
  DeleteCases[
    WolframLanguageData[All, {"CanonicalName", "RelatedSymbols"}], {_, _Missing}];
k = MapAt[CanonicalName, k, {All, 2}];
data = 
  DeleteDuplicates[
    Sort /@ Flatten[Thread[#[[1]] \[UndirectedEdge] #[[2]]] & /@ k]];
GraphPlot[data, VertexSize -> Tiny, ImageSize -> Full]

Sin embargo, la cifra es demasiado grande. ¿Existe algún método para acercarlo y agregar información sobre los vértices?

Lo intenté Tooltip, sin embargo, no dio una trama.

Graph[Tooltip[#, #] & /@ VertexList[data], data]

¿Y cómo puedo usar colores para distinguir estas funciones por categorías como Audio, Imagen y Core language?

Tal vez podría usar el aprendizaje automático para distinguir estas funciones que probé, pero no funcionó tan bien.

space = 
  Thread[
    VertexList[data] -> 
      DimensionReduce[
        FeatureExtract[VertexList[data], {"SegmentedWords", "TFIDF"}], 
        1]];
space[[All, 2]] = Normalize[Flatten@space[[All, 2]]];
NumberLinePlot[space[[All, 2]]]

ACTUALIZAR:

Versión: 12.1.1

Estos ya eran una demostración en el NestGraphdocumento de.

Respuestas

6 BobHanlon Aug 20 2020 at 22:49

Soporte técnico CASO: 4620942

$Version

(* "12.1.1 for Mac OS X x86 (64-bit) (June 19, 2020)" *)

Clear["Global`*"]

Como sugirió Flinty, ejecutar código desde el documentation

graph = WolframLanguageData["Cos", "RelationshipCommunityGraph"]

Las etiquetas de los vértices no se representan correctamente.

Show[graph, ImageSize -> Large]

Como solución alternativa, arregle manualmente las etiquetas

graph /. Style[lbl_, _List] :> lbl

1 partida Aug 25 2020 at 16:07

Defina una función que pueda extraer vecinos con radio ralrededor del vértice n:

subgraph[g_, n_, r_] := Subgraph[g, AdjacencyList[g, n, r]~Join~{n}]

Echemos un vistazo a los vecinos cuya distancia a la Sinfunción es 2

subg = subgraph[Graph[data], "Sin", 2];
GraphPlot[HighlightGraph[subg, {"Sin"}], VertexLabels -> "Name", ImageSize -> Large]

Exporte los datos del gráfico que utilizará en el siguiente HTML:

json = {"nodes" -> 
    Table[{"id" -> i, "group" -> 1}, {i, VertexList@subg}], 
        "links" -> 
    Table[{"source" -> i[[1]], "target" -> i[[2]], "value" -> 1}, {i, EdgeList@subg}]};
Export["miserables.json", json]

Descargue el script D3.js index.htmlde D3.js v4 Force Directed Graph con etiquetas

Luego, en la terminal, escriba lo siguiente (python3): python -m http.server

Luego, abra http://localhost:8000/en Chrome, la figura puede arrastrar el vértice de forma interactiva

Pero para todo el gráfico grande, el D3.js no puede manejarlo ...