用Java的画图实现 价格-日期 的走势图
用Java画图实现 价格-日期 的走势图(如下图),画好后生成图片格式,保存在作用域中,显示到页面上,谁有例子啊,或者提供点具体思路追问:能发一张 上面代码的 效果图吗?
追问:能发一张 上面代码的 效果图吗?
答案:
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.AxisLocation;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import com.china.util.DateUtil;
public class Polyline {
@SuppressWarnings("deprecation")
public JFreeChart create(CategoryDataset dataset,String title,String xTitle,String yTitle){
JFreeChart chart = ChartFactory.createLineChart(title, xTitle, yTitle, dataset, PlotOrientation.VERTICAL, true, true, false);
chart.setTitle(new TextTitle(DateUtil.getCurrYear()+title,new Font("黑体",Font.ITALIC,20)));//重新设置图表标题,改变字体
chart.getTitle().setFont(new Font("黑体", Font.BOLD, 20));
chart.getLegend().setItemFont(new Font("黑体", Font.TYPE1_FONT, 13));//最底部中文乱码
chart.setBackgroundPaint(Color.getColor("#EEF2FB"));//设定背景色为白色
CategoryPlot plot = (CategoryPlot)chart.getPlot();
plot.setBackgroundPaint(Color.white); //设定图表数据显示部分背景色
plot.setDomainGridlinePaint(Color.blue); //横坐标网格线白色
plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT); //数据轴的位置
plot.setDomainGridlinesVisible(true); //网格线:true-->可见,false-->不可见
plot.setRangeGridlinePaint(Color.blue); //纵坐标网格线白色
CategoryAxis categoryAxis = plot.getDomainAxis();//取得横轴
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);//设置分类标签以45度角倾斜
categoryAxis.setLabelFont(new Font("宋体",Font.CENTER_BASELINE,16));//设置横轴显示标签的字体
categoryAxis.setTickLabelFont(new Font("宋体", Font.TYPE1_FONT, 16)); //解决横坐标乱码
NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();//取得纵轴
numberAxis.setLabelFont(new Font("宋体",Font.TYPE1_FONT,16));//设置纵轴显示标签的字体
numberAxis.setTickLabelFont(new Font("宋体", Font.TYPE1_FONT, 13)); //解决纵坐标乱码
numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//使纵坐标的最小单位格为整数
numberAxis.setAutoRangeIncludesZero(false);
//获得renderer 注意这里是下面造型到lineandshaperenderer!!
LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)plot.getRenderer();
lineandshaperenderer.setShapesVisible(true); //series 点(即数据点)可见
lineandshaperenderer.setShapesFilled(true); // 数据点被填充即不是空心点
lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {10F, 6F}, 0.0F)); //定义series为”First”的(即series1)点之间的连线 ,这里是虚线,默认是直线
lineandshaperenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1, 1.0F,new float[] {6F, 6F}, 0.0F)); //定义series为”Second”的(即series2)点之间的连线
lineandshaperenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1, 1.0F,new float[] {2.0F, 6F}, 0.0F)); //定义series为”Third”的(即series3)点之间的连线
//jfreechart折线点显示值
DecimalFormat decimalformat1 = new DecimalFormat("##0.00");//数据点显示数据值的格式
lineandshaperenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}", decimalformat1));
lineandshaperenderer.setItemLabelsVisible(true);//设置项标签显示
lineandshaperenderer.setBaseItemLabelsVisible(true);//基本项标签显示
//上面这几句就决定了数据点按照设定的格式显示数据值
return chart;
}
}
调 用
polyline.create(dataset, "月销售额数据分析表","如所选产年没有显示,即没有数据","金额(元)");像这种图形话的东西 建议使用jfreechart 里面自带的
:G-Y完全正确用java操作报表,想要源码我有,但是效果图不是这个,只是个例子,像要你那样的效果,自己改一下就行了
使用eclipse的birt插件,可以选用曲线图实现此效果
如果你不是实时显示的话,可以使用jQuery框架,只要将数据交给jQuery,他会自动生成曲线,很简单的,没必要用java,那样的的话很相对复杂些,可以有不同的风格让你选择。使用java的话在页面上的效果远不如jQuery的特效