gpt4 book ai didi

java - 如何使用 Prefuse 制作堆积面积图?

转载 作者:搜寻专家 更新时间:2023-11-01 03:13:33 27 4
gpt4 key购买 nike

我想制作一个堆叠面积图,其前缀类似于以下内容: http://prefuse.org/gallery/namevoyager/

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

最佳答案

这是一个使用 StackedAreaChart 布局的可编译示例。我把它放在这里是因为我在其他地方找不到它,希望它对其他人有引用值(value)。这里的关键是了解 StackedAreaChart 假定您的表遵循以下架构:

  1. ID 的一栏,说“姓名”,
  2. 一个或多个列用于与 id 对应的实际数据。
  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");
}
}

要让它显示轴,请引用 prefuse 分发中包含的 Congress.java 演示。

关于java - 如何使用 Prefuse 制作堆积面积图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4870679/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com