public class FmjyfsReportAction extends ActionSupport{
private Map scoreMap = new HashMap();
public String report(){
List qushi = new ArrayList();
List a = new ArrayList();
a.add("过分干涉"); //这个表示节点 我有6个 所以应该有6个节点
a.add("1"); //这个有4个表示有4条线 我应该出2跳线 所以只能有2个
a.add("2");
List b = new ArrayList();
b.add("拒绝/否认");
b.add("5");
b.add("6");
List c = new ArrayList();
c.add("温暖/理解");
c.add("10");
c.add("6");
List d = new ArrayList();
d.add("鼓励/支持");
d.add("6");
d.add("1");
List e = new ArrayList();
e.add("惩罚/严厉");
e.add("9");
e.add("4");
List f = new ArrayList();
f.add("过度保护");
f.add("15");
f.add("10");
qushi.add(a);
qushi.add(b);
qushi.add(c);
qushi.add(d);
qushi.add(e);
qushi.add(f);
generateGraph(qushi);
generateGraph(list);
return SUCCESS;
}
private void generateGraph(List qushi) { //这里可以随便发挥,我现在是写的2条线
Map map = new HashMap();
if(qushi!=null && qushi.size()>0){
String key1 = "父亲";
String key2 = "母亲";
List father = new ArrayList();
List mother = new ArrayList();
for (int i = 0; i < qushi.size(); i++) {
List data = (List) qushi.get(i);
String batchId = (String) data.get(0);
Object[] obj1 = new Object[2];
obj1[0] = data.get(1);
obj1[1] = batchId;
father.add(obj1);
obj1 = new Object[2];
obj1[0] = data.get(2);
obj1[1] = batchId;
mother.add(obj1);
}
map.put(key1, father);
map.put(key2, mother);
}
TrendGraphCommon t = new TrendGraphCommon();
t.setMap(map);
scoreMap.put("percentReport", t);
}
}
public class TrendGraphCommon implements DatasetProducer, ChartPostProcessor,
Serializable {
/**
* 要展示的数据
* Map<String, List<Object[]>>中String即为线条名称
* List<Object[]>中Object[]{数值,批次}
*/
private Map<String, List<Object[]>> map = null;
/**
* 是否自动生成纵坐标。true为自动生成
*/
private boolean autoTickUnit = true;
/**
* 如果不自动生成纵坐标则需指定纵坐标的间隔单位。
*/
private double tickUnit = 0;
/**
* 如果不自动生成纵坐标则需指定纵坐标的最小值。
*/
private double marginMin = 0;
/**
* 如果不自动生成纵坐标则需指定纵坐标的最大值。
*/
private double marginMax = 0;
/**
* 设置横坐标分类显示信息倾斜度
*/
private boolean tilt = false;
public Object produceDataset(Map arg0) throws DatasetProduceException {
if (map != null && map.size() == 0) {
map = new HashMap<String, List<Object[]>>();
}
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (Map.Entry<String, List<Object[]>> entry : map.entrySet()) {
for (Object[] item : entry.getValue()) {
if (item[0] instanceof Integer) {
dataset.addValue(((Integer)item[0]).doubleValue(), entry
.getKey(), item[1].toString());
} else if (item[0] instanceof String) {
dataset.addValue(Double.parseDouble((String)item[0]), entry
.getKey(), item[1].toString());
} else if (item[0] instanceof Double) {
dataset.addValue((Double)item[0], entry
.getKey(), item[1].toString());
} else if (item[0] instanceof Float) {
dataset.addValue(((Float)item[0]).doubleValue(), entry
.getKey(), item[1].toString());
} else if (item[0] instanceof Long) {
dataset.addValue(((Long)item[0]).doubleValue(), entry
.getKey(), item[1].toString());
} else if (item[0] instanceof Number) {
dataset.addValue(((Number)item[0]).doubleValue(), entry
.getKey(), item[1].toString());
}
}
}
return dataset;
}
/**
* 指定图形参数
*/
public void processChart(Object chart, Map arg1) {
CategoryPlot plot1 = (CategoryPlot) ((JFreeChart) chart).getPlot();
plot1.setNoDataMessage("暂时没有数据");
plot1.setBackgroundPaint(Color.lightGray);
plot1.setRangeGridlinePaint(Color.BLUE);
plot1.setRangeGridlinesVisible(true);
plot1.setDomainGridlinePaint(Color.BLUE);
plot1.setDomainGridlinesVisible(true);
NumberAxis numberaxis = (NumberAxis) plot1.getRangeAxis();
numberaxis.setUpperMargin(1);//设置数值离顶部的距离
if (!autoTickUnit) {
numberaxis.setAutoTickUnitSelection(autoTickUnit);
// 设置纵坐标值的间距为10
numberaxis.setTickUnit(new NumberTickUnit(tickUnit));
// 纵坐标值只能是0-100之间的值
numberaxis.setRangeWithMargins(marginMin, marginMax);
}
if (tilt) {
CategoryAxis domainAxis = plot1.getDomainAxis();
domainAxis.setCategoryLabelPositions(CategoryLabelPositions
.createUpRotationLabelPositions(Math.PI / 3.0));// 设置横坐标分类显示信息倾斜度
}
LineAndShapeRenderer renderer = (LineAndShapeRenderer)plot1.getRenderer();
DecimalFormat decimalformat1 = new DecimalFormat("##.##");//数据点显示数据值的格式
renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", decimalformat1));
//上面这句是设置数据项标签的生成器
renderer.setItemLabelsVisible(true);//设置项标签显示
renderer.setBaseItemLabelsVisible(true);//基本项标签显示
//上面这几句就决定了数据点按照设定的格式显示数据值
renderer.setShapesFilled(Boolean.TRUE);//在数据点显示实心的小图标
renderer.setShapesVisible(true);//设置显示小图标
}
//省略了set,get方法
}
//jsp
<ul class="list_pad">
<li>
<c:set var="xyCoure2" value="${scoreMap['percentReport']}" /> <cewolf:chart id="XYline" type="line">
<cewolf:gradientpaint>
<cewolf:point x="1" y="1" color="#ffffff" />
<cewolf:point x="1" y="300" color="#ffffff" />
</cewolf:gradientpaint>
<cewolf:data>
<cewolf:producer id="xyCoure2" />
<cewolf:chartpostprocessor id="xyCoure2">
<cewolf:param name="0" value='<%= "#FFFddF"%>' />
<cewolf:param name="1" value='<%= "#FF0000"%>' />
<cewolf:param name="2" value='<%= "#00FF00"%>' />
<cewolf:param name="3" value='<%= "#0000FF"%>' />
<cewolf:param name="4" value='<%= "#F00000"%>' />
<cewolf:param name="5" value='<%= "#00F000"%>' />
<cewolf:param name="6" value='<%= "#000F00"%>' />
<cewolf:param name="7" value='<%= "#FFFFFF"%>' />
</cewolf:chartpostprocessor>
</cewolf:data>
</cewolf:chart>
<cewolf:img chartid="XYline" renderer="/cewolf" width="600" height="200" />
</li>
</ul>
//可以先用这个静态的折现图试试看 嘻嘻
分享到:
相关推荐
C#绘制折线图 折线图是一种常用的数据可视化方法,用于展示数据的趋势和变化。C#提供了多种绘制折线图的方法,包括使用 Graphics 类、Bitmap 类和 Pen 类等。在本文中,我们将介绍如何使用 C# 绘制折线图,包括绘制...
接着,"Echarts折线图"部分则涵盖了如何使用Echarts库创建动态、交互式的折线图。Echarts提供了一系列参数供开发者配置,如`series`定义数据序列,`xAxis`和`yAxis`定义坐标轴,`tooltip`定义提示框等。通过灵活调整...
在PB中,自定义折线图是一项关键功能,它允许开发者根据特定需求创建具有个性化特性的图表,以便更好地可视化数据。本文将深入探讨PB自定义折线图的相关知识点,并通过分析"Graph2"这个文件来提供具体的实践指导。 ...
在JavaScript(js)中实现折线图是一种常见的数据可视化需求,尤其在网页开发中,用于展示动态或静态的数据。折线图能够清晰地展现数据的变化趋势,帮助用户理解和分析数据。下面将详细介绍如何使用JavaScript来创建...
MPAndroidChart是一款强大的开源库,用于在Android平台上创建各种图表,包括折线图、柱状图、饼图等。这个"MPAndroidChart折线图Demo"是开发者分享的一个实例,帮助我们了解如何在Android应用中集成和使用...
在Java编程环境中,绘制折线图是一项常见的任务,特别是在数据分析、可视化或教学示例中。这个"java折线图绘制程序"是专为这个目的设计的,它允许开发者和用户轻松地创建和显示折线图,以便更好地理解和解释数据。 ...
在数据分析和可视化领域,折线图是一种非常常见且实用的图表类型,用于展示数据随时间变化的趋势或比较多个变量的变化情况。本主题将深入探讨如何实现一个简单的折线图,并探讨其可扩展性。 首先,我们需要理解折线...
在数据分析和可视化领域,折线图是一种非常常见且强大的工具,尤其在展示数据随时间变化的趋势时尤为适用。本文将针对R语言的新手和小白,详细介绍如何使用R语言绘制出美观且具有信息量的折线图。 首先,我们需要...
在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而JFreeChart则是一个强大的Java图表库,能够帮助开发者生成各种复杂的图表,包括折线图。本教程将详细介绍如何在JSP中利用JFreeChart库来...
MPAndroidChart是一个强大的开源库,它允许开发者轻松地创建各种图表,包括折线图。本篇将深入探讨如何利用MPAndroidChart实现多条数据的实时动态更新,并控制折线图上数据的精度。 首先,我们需要了解...
在Android开发中,自定义视图是实现特定图形或交互效果的重要手段,而自定义折线图和曲线图则是数据可视化中的常见需求。本篇将深入探讨如何在Android环境中实现这两种图表。 首先,我们需要理解折线图和曲线图的...
在Winform应用中,有时我们需要展示数据,其中一种常见的方式就是通过图表,比如折线图。折线图能直观地表示数值随时间或某个连续变量的变化趋势。本示例将探讨如何在Winform应用中实现自定义的折线图绘制。 首先,...
在ASP中生成折线图是常见的数据可视化需求,这通常涉及到JavaScript图表库或者服务器端组件的使用。下面将详细探讨如何在ASP中实现折线图的生成。 一、原理介绍 ASP生成折线图的基本流程通常是:在服务器端处理数据...
在IT行业中,数据可视化是数据分析和展示的重要环节,而折线图作为一种常见且直观的数据图表类型,被广泛应用于各种场景,如经济走势分析、趋势预测、项目进度追踪等。"可滑动可点击的折线图"是一个特殊的设计,它...
在Java的Swing环境中,JFreeChart库是一个强大的工具,用于创建各种图表,包括柱状图、折线图等。本教程将详细讲解如何利用JFreeChart在Swing应用程序中实现这些功能,以及如何在折线图中动态添加线。 首先,确保你...
在Android开发中,折线图是一种常见的数据可视化方式,它能直观地展示数据的变化趋势。本文将详细讲解如何使用Android Studio来实现一个折线图。 首先,你需要选择一个图形库来帮助绘制折线图。在Android社区中,有...
VS2008环境下Teechart绘制折线图柱状图 TeeChart是业界知名的数据可视化控件,它可以帮助开发者快速创建各种类型的图表,例如折线图、柱状图、三维图等。在VS2008环境下使用TeeChart绘制折线图柱状图需要按照以下...
"jq报表折线图"这个功能模块显然聚焦于利用jQuery(jq)库来实现动态和交互式的报表,特别是折线图这一图表类型。以下是关于这个主题的详细解释: **jQuery(jq)库** jQuery是一个轻量级的JavaScript库,它简化了...
在VB6(Visual Basic 6)编程环境中,创建动态折线图是一项常见的需求,尤其是在数据分析、可视化和实时数据展示的应用中。本项目提供的"VB6动态折线图"源码,可以帮助开发者快速实现这一功能,它包含有以下关键知识...