大虾们:
是关于折线图的问题,
如果了解请帮我解决下我的问题,
就是横坐标是 1,2,3,4,5.。。。。。这样的顺序对吧,
但是我的却是。。。。。。5,4,3,2,1的 所以我想把它改过来 不知道该哪里
就是将 Collections 的 reverse();
解决
package com.szallway.phr.servlet;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.annotations.CategoryLineAnnotation;
import org.jfree.chart.annotations.XYLineAnnotation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.renderer.xy.HighLowRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import com.szallway.phr.pojo.BloodPressure;
public class Chart extends HttpServlet {
private static final long serialVersionUID = 1L;
public Chart() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
@SuppressWarnings("unchecked")
ArrayList<BloodPressure> list = (ArrayList<BloodPressure>) request.getSession().getAttribute("list");
Collections.reverse(list);
DefaultCategoryDataset dataSet = new DefaultCategoryDataset();
String sbp = "收缩压";
String dbp = "舒张压";
String lastdate = "";
int counter = 0;
String startdate = "";
if(list.size()!=0)
{
for(int i=0;i<list.size();i++)
{
BloodPressure bp = new BloodPressure();
bp = list.get(i);
if(!"".equals(bp.getvSystolic())&&!"".equals(bp.getvDiastolic())){
dataSet.addValue(Integer.parseInt(bp.getvSystolic()), sbp, bp.getvDate());
dataSet.addValue(Integer.parseInt(bp.getvDiastolic()), dbp, bp.getvDate());
dataSet.addValue(80, "参考线1", bp.getvDate());
dataSet.addValue(120, "参考线2", bp.getvDate());
lastdate = bp.getvDate();
if (counter++ == 0) {
startdate = bp.getvDate();
}
}
}
}
/*
dataSet.addValue(80,"参考线1", startdate);
dataSet.addValue(80,"参考线1", lastdate);
dataSet.addValue(120,"参考线2", startdate);
dataSet.addValue(120,"参考线2", lastdate);
*/
System.out.println("startdate:" + startdate);
System.out.println("lastdate:" + lastdate);
Font titlefont = new Font("新宋体", Font.PLAIN, 12);
Font itemfont = new Font("宋体", Font.BOLD, 14);
Font labelfont = new Font("新宋体", Font.PLAIN, 12);
JFreeChart chart = ChartFactory.createLineChart("图表标题", "时间", "血压值", dataSet,
PlotOrientation.VERTICAL, // 绘制方向
true, // 显示图例
true, // 采用标准生成器
false // 是否生成超链接
);
// 重新设置图表标题,改变字体
chart.setTitle(new TextTitle("血压趋势图", titlefont));
// 取得统计图表的第一个图例
LegendTitle legend = chart.getLegend(0);
// 修改图例的字体
legend.setItemFont(itemfont);
// 取得背景
CategoryPlot plot = chart.getCategoryPlot();
//设置绘图区背景色
plot.setBackgroundPaint(Color.WHITE);
//设置水平方向背景线颜色
plot.setRangeGridlinePaint(Color.lightGray);
//设置是否显示水平方向背景线,默认值为true
plot.setRangeGridlinesVisible(true);
//设置垂直方向背景线颜色
plot.setDomainGridlinePaint(Color.lightGray);
//设置是否显示垂直方向背景线,默认值为false
plot.setDomainGridlinesVisible(true);
CategoryAxis domainAxis = plot.getDomainAxis();
//设置横轴字体
domainAxis.setLabelFont(labelfont);
//设置坐标轴标尺值字体
domainAxis.setTickLabelFont(labelfont);
//左边距 边框距离
domainAxis.setLowerMargin(0.01);
//右边距 边框距离,防止最后边的一个数据靠近了坐标轴。
domainAxis.setUpperMargin(0.06);
domainAxis.setMaximumCategoryLabelLines(2);
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setLabelFont(labelfont);
//Y轴显示整数
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
//最小跨度
rangeAxis.setAutoRangeMinimumSize(1);
//上边距,防止最大的一个数据靠近了坐标轴。
rangeAxis.setUpperMargin(0.18);
//最小值显示0
rangeAxis.setLowerBound(50);
//不自动分配Y轴数据
rangeAxis.setAutoRange(false);
//设置坐标标记大小
rangeAxis.setTickMarkStroke(new BasicStroke(1.6f));
//设置坐标标记颜色
rangeAxis.setTickMarkPaint(Color.BLACK);
// 获取折线对象
LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
// 设置实线
BasicStroke realLine = new BasicStroke(1.8f);
// 设置虚线
/*
float dashes[] = { 5.0f };
BasicStroke brokenLine = new BasicStroke(2.2f, // 线条粗细
BasicStroke.CAP_ROUND, // 端点风格
BasicStroke.JOIN_ROUND, // 折点风格
8f, dashes, 0.6f);
*/
// 根据绘制折线
for (int i = 0; i < dataSet.getRowCount() || i < 7; i++) {
renderer.setSeriesStroke(i, realLine); // 利用实线绘制
}
plot.setNoDataMessagePaint(Color.RED);//字体颜色
// 输出图片字节流
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),1.0f,chart,600,300,null);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}