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

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


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