Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JFreeCharts.TimeSeriesChart - отображение только 1 числа месяца / 2 сообщений из 2, страница 1 из 1
02.04.2012, 18:40:59
    #37735124
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JFreeCharts.TimeSeriesChart - отображение только 1 числа месяца
Здравствуйте. у меня такая вот фишка.

Есть Сервлет который генерирует в браузер картинку на основании JFreeCharts.

Может кто сталкивался и подскажет как сделать автоМасштабирование по первому числу месяца, время 6 утра?
И Второе как убрать пункты которые автоматически вставляются в график где есть значение. они слишком огромны!


Я прикрепляю рисунок.
http://dl.dropbox.com/u/26399837/JFreeeChartServlet.png

Дело в том, что например как сейчас на рисунке есть 6 месяцев, а диаграмма вмещает в себе 12 отрезков соответственно все дни делятся на 12 и ставлятся даты, а мне нужно не зависимо сколько дней, нужно поставить линию в 6 утра 1 числа месяца.

Буду благодарен за любую подсказку, не знаю в каком направлении смотреть..
Спасибо!

И вот код сервлета

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
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;
	}

}
...
Рейтинг: 0 / 0
02.04.2012, 19:28:58
    #37735222
_webdev_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JFreeCharts.TimeSeriesChart - отображение только 1 числа месяца
_webdev_ И Второе как убрать пункты которые автоматически вставляются в график где есть значение. они слишком огромны! - эту штучку решил, а вот с месяцами парюсь!
Код: java
1.
renderer.setBaseShapesVisible(false);
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JFreeCharts.TimeSeriesChart - отображение только 1 числа месяца / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]