1.所需要的jar包 jfreechar-1.0.10.jar
2.生成图的class 方法:
package data.pub.jfree;
import java.awt.Color;
import java.awt.RenderingHints;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.SegmentedTimeline;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.Marker;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.ValueMarker;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.time.Minute;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.LengthAdjustmentType;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.TextAnchor;
import common.dataAccess.util.As;
import common.dataAccess.util.FileUtils;
import common.dataAccess.util.Property;
import common.dataAccess.util.ResourceUtils;
import data.pub.index.IndexTodayMin;
import data.pub.util.DateUtils;
/**
* 指数日内走势图
* @author yyao
*/
public class IndexRtChart{
/**
*
*/
private static final long serialVersionUID = 1L;
private static int stye = 0;
private static double min;
private static double max;
private static double close;
public static JFreeChart getChart(List<Map<String, String>> data) {
return createChart(getPreClose(data), createDatasetBackgroud(data));
}
private static JFreeChart createChart(double preClose,XYDataset datasetBack) {
JFreeChart chart = ChartFactory.createXYAreaChart(
"",
"", "",
datasetBack,
PlotOrientation.VERTICAL,
true, // legend
true, // tool tips
false // URLs
);
chart.setBackgroundPaint(ChartColors.TABLE_BACKGROUND_outside);
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(ChartColors.BARCHART_BACKGROUND);
plot.setOutlinePaint(ChartColors.PLOT_GRIDDING);
plot.setDomainGridlinesVisible(true);
plot.setForegroundAlpha(0.5f);
ChartCommons.setPlotLineColor(plot);
// plot.setRangeAxisLocation(0, AxisLocation.BOTTOM_OR_RIGHT);// 左边轴移到右边显示
ValueAxis domainAxis = new DateAxis("");
domainAxis.setLowerMargin(0.00001);
domainAxis.setUpperMargin(0.001);
plot.setDomainAxis(domainAxis);
ValueAxis range = new NumberAxis();
range.setLowerBound(getMin());
range.setUpperBound(getMax());
plot.setRangeAxis(range);
XYItemRenderer renderer = plot.getRenderer();
renderer.setSeriesPaint(0, ChartColors.Market_FILL); //阴影色
ChartCommons.setXAxis(plot);
ChartCommons.setYAxis(plot);
//处理时间轴 过滤非交易时段 x 轴 1801 *倍数控制横向显示
SegmentedTimeline timeline = new SegmentedTimeline(SegmentedTimeline.FIFTEEN_MINUTE_SEGMENT_SIZE, 36, 60);
timeline.setBaseTimeline(SegmentedTimeline.newMondayThroughFridayTimeline());
timeline.addException(12600000, 17600000);
((DateAxis) domainAxis).setTimeline(timeline);
((DateAxis) domainAxis).setTickUnit(
new DateTickUnit(
DateTickUnit.SECOND, 2701, new SimpleDateFormat("HH:mm")));
((DateAxis) domainAxis).setMaximumDate(DateUtils.parseDate("197001011500", "yyyyMMddhhmm"));
((DateAxis) domainAxis).setMinimumDate(DateUtils.parseDate("197001010930", "yyyyMMddhhmm"));
//Line renderer
XYLineAndShapeRenderer renderer1 = new XYLineAndShapeRenderer();
renderer1.setSeriesPaint(0, ChartColors.Market_LINE_1);
renderer1.setSeriesLinesVisible(0, true);
renderer1.setSeriesShapesVisible(0, false);
renderer1.setBaseShapesVisible(true);
renderer1.setBaseShapesFilled(true);
plot.setRenderer(1, renderer1);
plot.setDataset(1, (TimeSeriesCollection)datasetBack);
//标记昨日收盘价
Marker target = new ValueMarker(preClose);
target.setLabelOffsetType(LengthAdjustmentType.EXPAND);
target.setPaint(Color.BLACK);
target.setLabelAnchor(RectangleAnchor.TOP_RIGHT);
target.setLabelTextAnchor(TextAnchor.BOTTOM_RIGHT);
plot.addRangeMarker(target);
chart.removeLegend();
//Legend
// LegendTitle legend = chart.getLegend();
// legend.setMargin(new RectangleInsets(2, 2, 2, 2));
// legend.setFrame(new BlockBorder());
// legend.setBorder(0, 0, 0, 0);
// legend.setItemPaint(new Color(0x666666));
// legend.setItemFont(new Font("SimSun", Font.PLAIN, 12));
// BlockContainer container = new BlockContainer(new BorderArrangement());
// container.add(legend, RectangleEdge.LEFT);
// container.add(new EmptyBlock(270, 0));//值越小
// CompositeTitle legends = new CompositeTitle(container);
// legends.setPosition(RectangleEdge.TOP);
// chart.addSubtitle(legends);
// chart.removeSubtitle(chart.getSubtitle(0));
return chart;
}
//主线&&阴影
private static XYDataset createDatasetBackgroud(List<Map<String, String>> data) {
String name = "昨日收盘价";
TimeSeries series1 = new TimeSeries(name);
SimpleDateFormat format = new SimpleDateFormat("hhmm");