Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何制作带预使用的堆叠面积图?_Java_Visualization_Prefuse_Stacked Area Chart - Fatal编程技术网

Java 如何制作带预使用的堆叠面积图?

Java 如何制作带预使用的堆叠面积图?,java,visualization,prefuse,stacked-area-chart,Java,Visualization,Prefuse,Stacked Area Chart,我想制作一个预使用的堆叠面积图,如下所示: 但是,我不太确定从哪里开始,并且这些图表没有示例代码。我确实找到了prefuse.action.layout.StackedAreaChart,但不确定该如何处理它。您是否检查了?(不太完整,但这是一个开始) 在其中,您可以找到一个显示如何在图形元素上加载一些数据以及如何将其部署到可视化项目的 要生成一个StackedAreaChart,您需要将数据加载到一个prefuse.data.Table对象中,例如,您可以从CSV文件加载该对象: CSVTa

我想制作一个预使用的堆叠面积图,如下所示:

但是,我不太确定从哪里开始,并且这些图表没有示例代码。我确实找到了prefuse.action.layout.StackedAreaChart,但不确定该如何处理它。

您是否检查了?(不太完整,但这是一个开始)

在其中,您可以找到一个显示如何在图形元素上加载一些数据以及如何将其部署到可视化项目的

要生成一个
StackedAreaChart
,您需要将数据加载到一个
prefuse.data.Table
对象中,例如,您可以从CSV文件加载该对象:

CSVTableReader reader=new CSVTableReader();
Table myTable=reader.readTable("/myDataFile.csv");
然后,将表格作为数据组添加到可视化中,即“表格”

然后,创建StackedAreaChart,并将其添加到visualization actions集合:

//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");
希望这能有所帮助,至少作为第一个开始(代码片段不是用于复制粘贴的,可能包含一些编译错误)


祝你好运。

这里有一个使用StackedAreChart布局的可编译示例。我把它放在这里是因为我在其他地方找不到它,希望它能对其他人有用。这里的关键是要理解StackedAreaChart假设您的表遵循以下模式:

  • id的一列,如“name”
  • 对应于id的实际数据的一列或多列
  • 计算的多边形有三列,分别命名为“_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");
        }
    }
    

    要让它显示轴,请参阅prefuse发行版中包含的Congress.java演示。

    谢谢。几年前我看过这本手册,但没怎么想,因为它太少了。我想它其实很有价值。
    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");
        }
    }