Здравствуйте. у меня такая вот фишка. Есть Сервлет который генерирует в браузер картинку на основании JFreeCharts. Может кто сталкивался и подскажет как сделать автоМасштабирование по первому числу месяца, время 6 утра? И Второе как убрать пункты которые автоматически вставляются в график где есть значение. они слишком огромны!Я прикрепляю рисунок. http://dl.dropbox.com/u/26399837/JFreeeChartServlet.pngДело в том, что например как сейчас на рисунке есть 6 месяцев, а диаграмма вмещает в себе 12 отрезков соответственно все дни делятся на 12 и ставлятся даты, а мне нужно не зависимо сколько дней, нужно поставить линию в 6 утра 1 числа месяца. Буду благодарен за любую подсказку, не знаю в каком направлении смотреть.. Спасибо! И вот код сервлета | Код | package chart;
import java.awt.BasicStroke; import java.awt.Color; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Random;
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; 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.axis.DateAxis; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYItemRenderer; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.general.DefaultPieDataset; import org.jfree.data.time.Hour; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; import org.jfree.ui.RectangleInsets;
@WebServlet("/ChartServlet") public class ChartServlet extends HttpServlet { private static final long serialVersionUID = 1L;
private Random rand = new Random();
public ChartServlet() { super(); }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/png");
OutputStream outputStream = response.getOutputStream();
XYDataset dataset = createDataset(); JFreeChart chart = getChart(dataset); int width = 1550; int height = 700; ChartUtilities.writeChartAsPNG(outputStream, chart, width, height); }
public JFreeChart getChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createTimeSeriesChart( "JFreeeChartServlet", // title "Date", // x-axis label "Price", // y-axis label dataset, // data true, // create legend? true, // generate tooltips? false // generate URLs? );
chart.setBackgroundPaint(Color.white); XYPlot plot = (XYPlot) chart.getPlot(); plot.setBackgroundPaint(Color.lightGray); plot.setDomainGridlinePaint(Color.white); plot.setRangeGridlinePaint(Color.white); plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0)); plot.setDomainCrosshairVisible(true); plot.setRangeCrosshairVisible(true); XYItemRenderer r = plot.getRenderer(); if (r instanceof XYLineAndShapeRenderer) { XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r; renderer.setBaseShapesVisible(true); renderer.setBaseShapesFilled(true); } DateAxis axis = (DateAxis) plot.getDomainAxis(); axis.setDateFormatOverride(new SimpleDateFormat("dd-MMM-yyyy")); return chart; }
private XYDataset createDataset() { double randDouble; int checkDay; TimeSeries s1 = new TimeSeries("Line1", Hour.class);
for (int y = 2013; y < 2014; y++) { for (int m = 1; m <= 6; m++) { checkDay = checkDaytoMouth(m,y); for (int d = 1; d <= checkDay; d++) { for (int h = 0; h <= 24; h++) {
randDouble = rand.nextDouble() * 100 + 100;
s1.add(new Hour(h, d, m, y), randDouble); } } } } TimeSeriesCollection dataset = new TimeSeriesCollection(); dataset.addSeries(s1); dataset.setDomainIsPointsInTime(false);
return dataset; }
private int checkDaytoMouth(int month,int year) { Calendar calendar= GregorianCalendar.getInstance(); calendar.set(Calendar.YEAR, year); calendar.set(Calendar.MONTH, month-1); int dayOfMonth= calendar.getActualMaximum(Calendar.DATE);
return dayOfMonth; }
} |
|