Префузия API Java создает края
Я использую prefuse в последнее время, чтобы сделать некоторые визуализации. Что я делаю, так это загружаю некоторую информацию из базы данных, создаю для них экземпляр префузионной таблицы и строю график на основе этой информации. Это отлично работает.
У меня вопрос, как я могу создать ребра для этого графика?
Я предполагаю, что должен создать другую таблицу, чтобы удерживать края, но я не знаю, как создать эту вещь... Любая помощь приветствуется! Спасибо!
Вот мой код для настройки данных для графика:
Table nodeData = null;
String query1 = "my_select_statement";
try {
nodeData = datasrc.getData(query1);
} catch (DataIOException ex) {
ex.getMessage();
ex.printStackTrace();
}
Graph graph = new Graph(nodeData, true);
1 ответ
Существует конструктор для префузионного графа, который принимает таблицу ребер, как вы предлагаете:
public Graph(Table nodes, Table edges, boolean directed)
Я предлагаю вам проверить эту очень простую матричную программу с разделителями-пробелами для справки: https://github.com/brycecr/msmexplorer/blob/master/MSMExplorer/src/edu/stanford/folding/msmexplorer/io/DatGraphReader.java
Короче говоря, вы просто создаете таблицу, но вам нужны столбцы "source" и "target", где записи в этих столбцах являются индексами с 0 индексами в таблице узлов. Создание столбцов:
m_edgeTable = new Table();
m_edgeTable.addColumn(Graph.DEFAULT_SOURCE_KEY, int.class); //0th
m_edgeTable.addColumn(Graph.DEFAULT_TARGET_KEY, int.class); //1st
назначение исходного и целевого столбцов:
m_edgeTable.addRow();
m_edgeTable.set(rowNum, 0, sourceNodeIndex);
m_edgeTable.set(rowNum, 1, targetNodeIndex);
У вас была правильная идея!
PS: Если вы пишете программу для чтения графиков, то, как вам кажется, я действительно рекомендую создавать подклассы AbstractGraphReader
, Это облегчит вашу жизнь в будущем, так как вы можете использовать свой новый класс так же, как встроенные считыватели графиков.