восстановление диапазона оси домена вручную после уменьшения в jfreechart - PullRequest
0 голосов
/ 18 декабря 2011

Я использую JFreeChart для создания диаграммы временных рядов в своем приложении.
Я устанавливаю диапазон оси домена вручную, используя:

    ...
    plot.getDomainAxis().setAutoRange(false);
    Calendar c1=Calendar.getInstance();
    c1.set(Calendar.HOUR_OF_DAY, 10);
    c1.set(Calendar.MINUTE, 0);
    Calendar c2=Calendar.getInstance();
    c2.set(Calendar.HOUR_OF_DAY, 18);
    c2.set(Calendar.MINUTE, 0);
    plot.getDomainAxis().setRange(c1.getTimeInMillis(),c2.getTimeInMillis());
    ...

Увеличение масштаба диаграммы и затем уменьшение масштаба (Использованиемыши на самом графике) запускает AutoRange на обеих осях, что приводит к изменению диапазона оси домена до границ серии, а не из-за моей собственной ручной ярости.

Пример (просмотр диапазона оси домена):
Перед увеличением-уменьшением (Правильно):
enter image description here

После увеличения-уменьшения (Неправильно - это автоматический выбор диапазона)):
enter image description here

Как мне сделать так, чтобы уменьшить мой вручную установленный диапазон?

Спасибо

Ответы [ 4 ]

2 голосов
/ 18 декабря 2011

Вы можете попробовать restoreAutoBounds(), показано здесь , после чего укажите настройки своего домена.

Добавление: поведение, которое вы видите, определено в реализации прослушивателя мыши ChartPanel. Вы можете переопределить chartProgress() и восстановить ось своего домена, когда диаграмма закончит рисование без масштабирования.

0 голосов
/ 19 декабря 2018

Я создал собственный NumberAxis с фиксированным диапазоном.Уменьшение приведет к автоматическому увеличению этого фиксированного диапазона.

class FixedRangeNumberAxis extends NumberAxis
{
    private Range range;

    FixedRangeNumberAxis(String label, Range range)
    {
        super(label);
        this.range = range;
    }

    @Override
    protected void autoAdjustRange()
    {
        setRange(range, false, false);
    }
}
0 голосов
/ 20 ноября 2015

Решение Магалло выше сработало отлично. Я нашел это еще более полезным, если бы я добавил еще один конструктор:

MyNumberAxis(String label, boolean restoreDefaulAutoRange, Range defaultRange) {
  super(label);
  m_RestoreDefaultAutoRange = restoreDefaulAutoRange;
  setDefaultAutoRange(defaultRange);
}
0 голосов
/ 11 марта 2014

вот решение:

class MyNumberAxis extends org.jfree.chart.axis.NumberAxis
{
    private boolean m_RestoreDefaultAutoRange;

    MyNumberAxis()
    {
        super();
    }

    MyNumberAxis(String label)
    {
        super(label);
    }

    MyNumberAxis(String label, boolean restoreDefaulAutoRange)
    {
        super(label);
        m_RestoreDefaultAutoRange = restoreDefaulAutoRange;
    }

    @Override
    protected void autoAdjustRange()
    {
        if( m_RestoreDefaultAutoRange )
        {
            Plot plot = getPlot();
            if( plot != null && plot instanceof ValueAxisPlot)
            {
                Range r = getDefaultAutoRange();
                setRange(r, false, false);
            }
        }
        else
            super.autoAdjustRange();
    }
}

Создайте экземпляр MyNumberAxis, установив логическое значение true, и используйте его в своем графике (plot.setRangeAxis () метод).Если вы хотите вести себя как NumberAxis по умолчанию, передайте false как логическое значение.

...