Этикетки для вершин с использованием библиотеки Юнга -- java поле с участием label поле с участием vertex поле с участием jung пол Связанный проблема

Labels for vertices using Jung library


0
vote

проблема

русский

Я начал использовать библиотеку Юнга для моей визуализации графика. Основная проблема в настоящее время в настоящее время я не знаю, как установить этикетки / метаданные для моих вершин. В зависимости от конкретного атрибута вершины, я хотел бы раскрасить вершины по-разному. Объект узла класса содержит дополнительное целочисленное значение, я хотел бы добавить в качестве дополнительного атрибута (GetGroup ()) для вершин. Следующий код визуализирует только The GetID () - строку каждого узла.

Любая рекомендация?

Это мой следующий код в основном классе:

 <код> Graph<String,Double> g = new SparseGraph<String,Double>();     List<Link> linkList = new ArrayList<Link>();     List<Node> nodeList = new ArrayList<Node>();     linkList = f.getLinks();     nodeList = f.getNodes();     for(Node nodeElement:nodeList){         g.addVertex(nodeElement.getId());     }     for(Link linkElement:linkList){         g.addEdge(linkElement.getValue(), linkElement.getSource(), linkElement.getTarget());     }      VisualizationImageServer vs =               new VisualizationImageServer(                 new SpringLayout(g), new Dimension(500, 500));      vs.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {         public String transform(Object v) {             return Integer.toString(((Node)v).getGroup());         }     });      JFrame frame = new JFrame("");     frame.getContentPane().add(vs);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.pack();     frame.setVisible(true);   
Английский оригинал

I started to use the Jung library for my visualization of a graph. Main problem currently is that I don't know how to set labels/metadata for my vertices. Depending on a specific attribute of a vertex, I would like to color the vertices differently. The object of class Node contains an additional Integer-value, I would like to add as an additional attribute (by getGroup()) for the vertices. The following code only visualizes the getId()-String of each node.

Any recommendation?

This is my following code in the main class:

Graph<String,Double> g = new SparseGraph<String,Double>();     List<Link> linkList = new ArrayList<Link>();     List<Node> nodeList = new ArrayList<Node>();     linkList = f.getLinks();     nodeList = f.getNodes();     for(Node nodeElement:nodeList){         g.addVertex(nodeElement.getId());     }     for(Link linkElement:linkList){         g.addEdge(linkElement.getValue(), linkElement.getSource(), linkElement.getTarget());     }      VisualizationImageServer vs =               new VisualizationImageServer(                 new SpringLayout(g), new Dimension(500, 500));      vs.getRenderContext().setVertexLabelTransformer(new ToStringLabeller() {         public String transform(Object v) {             return Integer.toString(((Node)v).getGroup());         }     });      JFrame frame = new JFrame("");     frame.getContentPane().add(vs);     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     frame.pack();     frame.setVisible(true); 
</div
           

Список ответов

0
 
vote

Вы не уточняли, какую версию JUNG вы используете, но вы получили правильную общую идею: вызов SetVertexLabeltransformer () с функцией, которая преобразует узлы в строку, которую вы хотите рендер.

Это сказано, что есть несколько вопросов с вашим кодом, как написано, и я не уверен, что понимаю, как вы получаете сообщение о том, как указано, указанное выше.

(0) Я не понимаю, почему вы добавляете идентификатор узла в качестве вершины, а не только <код> Node . Являются конечными точками вашего Link Sode IDS или <код> Node s? В любом случае, если вы не добавите <код> Node , то из вашего кода не ясно, как написано, как вы ожидаете, что группа Vertex будет доступна.

(1) Вершины графика идентификаторы узла, а не <Код> Node s, но вы отличаете объект вершины, переданный <код> transform() на <код> Node . Я ожидаю, что это бросить <код> ClassCastException .

(2) Даже предположить, что ваши вершины были фактически <код> Node объектов, Я удивлен, что вы сообщаете, что идентификатор вершины (а не в группе) - это то, что отображается на метке, потому что единственное, что вы просите в лейблу вершины, является группой; Я бы не ожидал, что удостоверение личности вообще появится.

, который сказал, если вершины <код> Node объекты, и вы хотите, чтобы несколько элементов отображались, это довольно легко; Просто укажите функцию, которая выполняет то, что вы хотите на Link0 объект.
* Если эта функция <код> Link1 , то вы можете использовать <код> Link2 (и это должно быть по умолчанию, поэтому вам даже не нужно указывать его); Больше на этом ниже. * Если эта функция (говорит) <Код> Link3 , то это должно работать (в Java 8):

 <код> Link4  

Или вы можете сделать анонимную вещью внутреннего класса, если вы не используете Java 8.

Если вы не хотите, чтобы ваши вершины быть <код> Link5 объектов, то вам нужно будет предоставить способ отображения объектов вершин (идентификаторы узла) к узлам, такие как <код> Link6 , а затем поставляйте эту карту на функцию, которая преобразует вершины на метки:

 <код> Link7  

Примечание: <код> Link8 обычно не должен иметь его <код> Link9 метода, переопределенным; Он просто указывает, что вы хотите использовать <код> Node0 самого объекта как метку.

 <код> Node1  

(Излишне говорить, <Код> Node2 предписат Java 8. :))

 

You didn't specify which version of JUNG you're using, but you've got the right general idea: call setVertexLabelTransformer() with a function that converts nodes to the string that you want to render.

That said, there are a few issues with your code as written and I'm not sure I understand how you're getting the reported behavior with the code as quoted above.

(0) I don't understand why you're adding the node ID as the vertex, rather than just the Node. Are the endpoints of your Links node IDs or Nodes? In any event, if you don't add the Node, then it's not clear from your code as written how you expect the vertex Group to be available.

(1) The vertices of the graph are node IDs, not Nodes, but you're casting the vertex object passed to transform() to a Node. I would expect this to throw a ClassCastException.

(2) Even supposing that your vertices were actually Node objects, I'm surprised that you're reporting that the vertex ID (rather than the Group) is what's showing up on the label, because the only thing that you're asking for in the vertex label is the Group; I wouldn't expect the ID to be showing up at all.

That said, if the vertices are Node objects, and you want multiple elements to show up, it's pretty easy; just provide a function that does what you want on the Node object.
* If that function is toString(), then you can use ToStringLabeller (and that should actually be the default, so you shouldn't even need to specify it); more on that below. * If that function is (say) getLabel(), then this should work (in Java 8):

// either of these should work setVertexLabelTransformer(Node::getLabel()) setVertexLabelTransformer(v -> v.getLabel())     

or you can do the anonymous inner class thing if you're not using Java 8.

If you don't want your vertices to be Node objects, then you'll need to provide a way of mapping vertex objects (node IDs) to nodes, such as a Map<String, Node>, and then supply that map to the function that converts vertices to labels:

setVertexLabelTransformer(v -> labelToNode.get(v).getLabel()) 

Note: ToStringLabeller() shouldn't generally have its transform() method overridden; it just specifies that you want to use the toString() of the object itself as the label.

// These two are equivalent setVertexLabelTransformer(v -> v.toString()) setVertexLabelTransformer(new ToStringLabeller()) 

(Needless to say, ToStringLabeller() predates Java 8. :) )

</div
 
 
 
 

Связанный проблема

1  Jaxb Marshalling само отношении  ( Jaxb marshalling self relation ) 
Рассмотрим известное отношение сотрудника / менеджера <код> public class Employee { public Employee manager; public List<Employee> employees; } То, чт...

0  Чтение записи студентов из файла  ( Reading student record from file ) 
Я пытаюсь прочитать файл, который имеет запись студентов (имя, фамилия и оценка). Я написал простой код для выполнения этой задачи, но код не удается после пр...

1  Устройство не получают сообщение от GCM  ( Device not receive message from gcm ) 
Я пытаюсь использовать GCM для отправки уведомления с сервера на наше устройство. Все следуют в этом руководстве: http://hmkcode.com/android-google-cloud-m...

0  LinkedList Рекурсивный метод  ( Linkedlist recursive method ) 
Я пытаюсь написать рекурсивный метод, который печатает связанный список в обратном порядке, но я получаю ошибку Stackoverflow. Метод должен завершиться, когда...

-1  Невозможно получить доступ к файлу из сетевого диска  ( Unable to access file from network drive ) 
Я создаю отображение виртуального каталога в Weblogic, передавая местоположение сети и, похоже, не работает. <Код> <wls:virtual-directory-mapping> <wls:...

-1  Java создает массив объекта, который 40% длины массива должен быть объектом x другой объект 30% Z и 30% объекта Y [закрыто]  ( Java create an array of object which the 40 of the array length should be objec ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт . Этот вопрос нуждается в Детали или ясность . В настоящее...

9  Phone Gam [Ошибка] CMD: Команда не удалась с помощью выхода кода Enoent  ( Phone gap error cmd command failed with exit code enoent ) 
Я пытаюсь получить разрыв на телефоне работать на Android, и моя команда выводит следующее: <код> phonegap build android [phonegap] detecting Android SDK en...

1  Файл класса Java содержит комментарии - почему?  ( Java class file contains comments why ) 
Когда я открываю <код> MyClass.class файл в моем редакторе Eclipse, он также показывает мне комментарии кода. Не должен быть оптимизирован .class файла д...

2  Как получить направление на кратчайший путь внешнего круга в Google Maps Android, когда мое текущее местоположение находится внутри 2 или более кругов?  ( How to get direction to the shortest path outside circle in google maps android ) 
Как получить направление к ближайшему расположению внешний круг, если голубые точки - текущее местоположение? 1 [ 1 и как отображать маркеры только во...

0  Выберите JVM при запуске зажигания  ( Select jvm when running spark job ) 
Как я могу пройти путь Java, чтобы выпить, чтобы выбрать JVM, который не по умолчанию (не в Java_home)? Мне не разрешено устанавливать какие-либо env vars в м...

0  Создание ссылки IPC между плагинами APC Java и C #  ( Establishing ipc link between a java app and c based plugins ) 
У нас есть приложение Java, а также ряд плагинов C #, для других приложений (например, Excel), которые могут взаимодействовать с основным приложением. Слой св...

2  Наличие JSF выпивать поля поиска HTML. Doable?  ( Having jsf spit out an html search field doable ) 
Я не разработчик Java, но работаю с командой, которая использует JSF 1.2 Мы хотели бы начать использовать теги HTML 5 и атрибуты. Не отображается, что JSF 1...

1  Проблема с использованием TextureView с NDK  ( Issue using textureview with ndk ) 
Я работаю над небольшим кусочком кода, используя текстуру, чтобы отобразить результат среды MediaPlayer. Я сталкиваюсь с проблемой, пытающимся смешивать упр...

0  Многонаправленное отношение много к одному в DataNucleus  ( Many to one unidirectional relation in datanucleus ) 
Для контекста, сторона клиента я использую шаблон MVP, поэтому вид с One One liste знает только идентификатор, а когда мой новый <код> Many получен Сервер...

0  Как удалить начальное нулевое значение?  ( How to remove initial null value ) 
Я загружаю файл и отображаю его как ссылку ... но изначально, когда я загружаю страницу, она отображает нулевое значение ... Я хочу удалить это нулевое значен...

Связанный проблема

1  Jaxb Marshalling само отношении 
0  Чтение записи студентов из файла 
1  Устройство не получают сообщение от GCM 
0  LinkedList Рекурсивный метод 
-1  Невозможно получить доступ к файлу из сетевого диска 
-1  Java создает массив объекта, который 40% длины массива должен быть объектом x другой объект 30% Z и 30% объекта Y [закрыто] 
9  Phone Gam [Ошибка] CMD: Команда не удалась с помощью выхода кода Enoent 
1  Файл класса Java содержит комментарии - почему? 
2  Как получить направление на кратчайший путь внешнего круга в Google Maps Android, когда мое текущее местоположение находится внутри 2 или более кругов? 
0  Выберите JVM при запуске зажигания 
0  Создание ссылки IPC между плагинами APC Java и C # 
2  Наличие JSF выпивать поля поиска HTML. Doable? 
1  Проблема с использованием TextureView с NDK 
0  Многонаправленное отношение много к одному в DataNucleus 
0  Как удалить начальное нулевое значение?