Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JFreeCharts.TimeSeriesChart - отображение только, 1 числа месяца 
:(
    Опции темы
Killer_13
Дата 2.4.2012, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Здравствуйте. у меня такая вот фишка.

Есть Сервлет который генерирует в браузер картинку на основании 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;
    }

}

PM MAIL   Вверх
Killer_13
Дата 2.4.2012, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 12.1.2008
Где: Germany

Репутация: нет
Всего: 1



Цитата(Killer_13 @  2.4.2012,  17:39 Найти цитируемый пост)
И Второе как убрать пункты которые автоматически вставляются в график где есть значение. они слишком огромны!
 - эту штучку решил, а вот с месяцами парюсь!
Код

renderer.setBaseShapesVisible(false);
 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0377 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.