Вопрос

Я хотел бы сделать карту с уклаженной площадью с предварительным сходом, похожим на фологу:http://prefuse.org/gallery/namevoyager/

Я не совсем уверен, с чего начать, однако, и нет образца кода для этих графиков. Я нашел prefuse.action.layout.stackedareachart, но не уверен, что с ним делать.

Это было полезно?

Решение

Вы проверили Руководство по префузом? (Не слишком полное, но с чего начать).

В нем вы можете найти Пример приложения что показывает, как загрузить некоторые данные на элемент графика и как их развернуть в элемент визуализации.

Для получения StackedAreaChart вам нужно будет загрузить ваши данные в prefuse.data.Table объект, который вы можете загрузить, примером, из файла CSV:

CSVTableReader reader=new CSVTableReader();
Table myTable=reader.readTable("/myDataFile.csv");

Затем добавьте таблицу в визуализацию в качестве группы данных, т.е. "таблица"

Visualization vis = new Visualization();
vis.add("table", myTable);

Затем создайте Stackedareachart и добавьте его в сборку действий визуализации:

//params: name of the data group to layout, name of the data field in which to store computed polygons, and an array containing the names of the various data fields, in sorted order, that should be referenced for each consecutive point of a stack layer
StackedAreaChart chart=new StackedAreaChart ("table", fieldName, csvColumnsToCompute);
//add the layout action with a unique key
 vis.putAction("myChartLayout", chart);

Затем вы можете настроить различные действия макета или другие визуальные аспекты (см. Связанный пример).

Наконец, для отображения диаграммы вам придется создать объект отображения, привязать визуализацию и запустить действия макета на нем:

//this Display initialization is extracted from the Example app
Display d = new Display(vis);
d.setSize(720, 500); // set display size
// drag individual items around
d.addControlListener(new DragControl());
// pan with left-click drag on background
d.addControlListener(new PanControl()); 
// zoom with right-click drag
d.addControlListener(new ZoomControl());

// create a new window to hold the visualization
JFrame frame = new JFrame("prefuse example");
// ensure application exits when window is closed
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(d);
frame.pack();           // layout components in window
frame.setVisible(true); // show the window

//At the end: RUN THE CHART ACTION:
vis.run("myChartLayout");

Надеюсь, это поможет, по крайней мере, в качестве первого запуска (фрагменты кода не предназначены для копирования вставки и могут содержать некоторые ошибки компиляции).

Удачи.

Другие советы

Вот компилируемый пример для использования макета Stackedareachart. Я включаю его здесь, потому что я не мог найти его нигде, с надеждой, что это будет полезно в качестве ссылки для других. Ключ здесь заключается в том, чтобы понять, что Stackedareachart предполагает, что ваша таблица следует следующей схеме:

  1. Один столбец для идентификатора, скажем, «Имя»,
  2. Один или несколько столбцов для фактических данных, которые соответствуют идентификатору.
  3. Три столбца для расчетного многоугольника с именем "_polygon", "_polygon: Start" и "_polygon: End". Именно так был разработан класс Stackedareachart. «_polygon» на самом деле является постоянным Visualitem.polygon, так что вы можете использовать это вместо этого, как показано в следующем примере.

Вот:

import javax.swing.JFrame;
import prefuse.Constants;
import prefuse.Display;
import prefuse.Visualization;
import prefuse.action.ActionList;
import prefuse.action.RepaintAction;
import prefuse.action.assignment.ColorAction;
import prefuse.action.assignment.DataColorAction;
import prefuse.action.layout.StackedAreaChart;
import prefuse.data.Table;
import prefuse.render.DefaultRendererFactory;
import prefuse.render.PolygonRenderer;
import prefuse.util.ColorLib;
import prefuse.visual.VisualItem;

class Main {
    public static void main(String[] args) {
        ActionList color = new ActionList();
        int[] palette = new int[] {
            ColorLib.rgba(255,200,200,150),
            ColorLib.rgba(200,255,200,150)
        };
        ColorAction fillColor = new DataColorAction("table", "name",
                Constants.NOMINAL, VisualItem.FILLCOLOR, palette);
        color.add(fillColor);

        ActionList layout = new ActionList();
        layout.add(new RepaintAction());
        String[] fields = { "1980s", "1990s", "2000s" };
        layout.add(new StackedAreaChart("table", VisualItem.POLYGON, fields));

        Visualization vis = new Visualization();
        Table table = new Table();
        vis.add("table", table);

        table.addColumn("name", String.class);
        table.addColumn("1980s", int.class);
        table.addColumn("1990s", int.class);
        table.addColumn("2000s", int.class);
        table.addColumn(VisualItem.POLYGON, float[].class, null);
        table.addColumn(VisualItem.POLYGON+":start", float[].class, null);
        table.addColumn(VisualItem.POLYGON+":end", float[].class, null);

        int rowNumber = table.addRow();
        table.setString(rowNumber, "name", "Bob");
        table.setInt(rowNumber, "1980s", 1000);
        table.setInt(rowNumber, "1990s", 500);
        table.setInt(rowNumber, "2000s", 300);

        rowNumber = table.addRow();
        table.setString(rowNumber, "name", "Mary");
        table.setInt(rowNumber, "1980s", 800);
        table.setInt(rowNumber, "1990s", 1500);
        table.setInt(rowNumber, "2000s", 3200);

        vis.putAction("layout", layout);
        vis.putAction("color", color);

        DefaultRendererFactory drf = new DefaultRendererFactory();
        drf.add("ingroup('table')", new PolygonRenderer());
        vis.setRendererFactory(drf);

        Display display = new Display(vis);
        display.setSize(720, 500);

        JFrame frame = new JFrame("Prefuse StackedAreaChart Example");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(display);
        frame.pack();
        frame.setVisible(true);

        vis.run("layout");
        vis.run("color");
    }
}

Чтобы заставить его отобразить ось, обратитесь к демонстрации Congress.java, включенной в предварительное распределение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top