我想制作一个类似于以下前缀的堆积面积图:
http://prefuse.org/gallery/namevoyager/
但是,我不太确定从哪里开始,并且这些图表没有示例代码。我确实找到了 prefuse.action.layout.StackedAreaChart,但不知道如何处理它。
最佳答案
你检查过 Prefuse manual 吗? (不是太完整,但它是开始的东西)。
在其中,您可以找到一个 sample application,它向您展示了如何在 Graph 元素上加载一些数据,以及如何将其部署到可视化项。
要生成 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);
然后,您可以配置各种布局操作或其他视觉方面(请参阅链接示例)。
最后,为了显示图表,您必须创建一个 Display 对象,绑定(bind)可视化,并在其上运行布局操作:
//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");
希望这会有所帮助,至少作为第一次开始(代码片段不适用于复制粘贴,并且可能包含一些编译错误)。
祝你好运。