jfreechart折线图为横坐标换一种显示的问题

 

  大虾们:

   是关于折线图的问题,

      如果了解请帮我解决下我的问题,

           就是横坐标是 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); 

}

}

 

 

 

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dl_soft

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值