Frage

Ich möchte ein gestapeltes Flächendiagramm mit einem ähnlichen Prefuse wie dem Listen erstellen:http://prefuse.org/gallery/namevoyager/

Ich bin mir jedoch nicht ganz sicher, wo ich anfangen soll, und es gibt keinen Beispielcode für diese Diagramme. Ich habe Prefuse.action.layout.Stackedareachart gefunden, bin mir aber nicht sicher, was ich damit anfangen soll.

War es hilfreich?

Lösung

Hast du das überprüft Handbuch für Präfusion? (Nicht zu vollständig, aber es ist etwas zu Beginn).

Darin finden Sie eine Beispielanwendung Dies zeigt, wie Sie einige Daten in ein Graphelement laden und wie Sie sie für ein Visualisierungselement bereitstellen.

Zum Erzeugen a StackedAreaChart Sie müssen Ihre Daten in a laden prefuse.data.Table Objekt, das Sie durch das Beispiel aus einer CSV -Datei laden können:

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

Fügen Sie dann die Tabelle der Visualisierung als Datengruppe hinzu, dh "Tabelle"

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

Erstellen Sie dann den Stackedareachart und fügen Sie ihn zur Sammlung der Visualisierungsaktionen hinzu:

//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);

Anschließend können Sie verschiedene Layoutaktionen oder andere visuelle Aspekte konfigurieren (siehe das verknüpfte Beispiel).

Zum Schluss müssen Sie zum Anzeigen des Diagramms ein Anzeigeobjekt erstellen, die Visualisierung binden und die Layout -Aktionen darauf ausführen:

//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");

Ich hoffe, dies hilft zumindest als erster Start (die Code-Snippets sind nicht für Kopienpaste bestimmt und können einige Kompilierfehler enthalten).

Viel Glück.

Andere Tipps

Hier ist ein kompilierbares Beispiel für die Verwendung des Stackedareachart -Layouts. Ich schließe es hier ein, weil ich es nirgendwo anders finden konnte, mit der Hoffnung, dass es als Referenz für andere nützlich sein wird. Der Schlüssel hier ist zu verstehen, dass der Stackedareachart davon ausgeht, dass Ihre Tabelle dem folgenden Schema folgt:

  1. Eine Spalte für die ID, sagen Sie "Name",
  2. Eine oder mehrere Spalten für die tatsächlichen Daten, die der ID entsprechen.
  3. Drei Spalten für das berechnete Polygon mit dem Namen "_polygon", "_polygon: start" und "_polygon: End". So wurde die Stackedareachart -Klasse entworfen. "_polygon" ist eigentlich das konstante visualItem.polygon, sodass Sie dies stattdessen wie im folgenden Beispiel gezeigt verwenden können.

Hier ist es:

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");
    }
}

Damit es die Achse anzeigen kann, beziehen Sie sich auf die Demo von Congress.java, die in der Präfuseverteilung enthalten ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top