Стиль GRAL -Axis — сохранение одинаковой оси Y на всех графиках

#java #charts #plot #axis-labels

#java #Диаграммы #график #метки оси

Вопрос:

У меня есть график, который я создал с помощью GRAL:

График GRAL

Проблемы, с которыми я сталкиваюсь, связаны с осью. В принципе, я бы хотел, чтобы ось Y запускалась с 0 .. 4 на каждом графике, и я не могу найти способ заставить это поведение. Если я уменьшу масштаб, появятся дополнительные приращения, но я бы хотел, чтобы на незастроенных графиках отображалось 0 .. 4.

Я также пытался использовать setCustomTicks , но по умолчанию остаются галочки, есть ли способ удалить их и использовать только пользовательские?

Помощь была бы очень признательна!

Код для моего графика:

 int[][] seq_data_200 = chunkArray(seq_data, 200);
DataTable[] listData = new DataTable[seq_data_200.length];
for (int i = 0; i < seq_data_200.length; i  ){
    DataTable data = new DataTable(Integer.class, Integer.class);
    for (int j = 0; j < seq_data_200[i].length; j  ) {
        data.add(j, seq_data_200[i][j]);
    }
    listData[i] = data;
}

panel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
panel.setLayout(new GridLayout(seq_data_200.length,1,20,20));

for (int i = 0; i < listData.length; i  ) {
    XYPlot plot = new XYPlot(listData[i]);

    LineRenderer lines = new DefaultLineRenderer2D();
    plot.setLineRenderer(listData[i], lines);
    Color color = new Color(0.0f, 0.3f, 1.0f);
    plot.getPointRenderer(listData[i]).setColor(color);
    plot.getLineRenderer(listData[i]).setColor(color);

    double insetsTop = 20.0, insetsLeft = 60.0, insetsBottom = 60.0, insetsRight = 40.0;
    plot.setInsets(new Insets2D.Double(insetsTop, insetsLeft, insetsBottom, insetsRight));
    plot.getTitle().setText(getTitle(i, sequence));

    plot.getAxisRenderer(XYPlot.AXIS_X).setLabel("Bases");
    plot.getAxisRenderer(XYPlot.AXIS_X).setCustomTicks(getTicks(i, sequence));

    plot.getAxisRenderer(XYPlot.AXIS_Y).setLabel("Number of "   nucleo   "'s");
    plot.getAxisRenderer(XYPlot.AXIS_Y).setMinorTicksVisible(false);
    plot.getAxisRenderer(XYPlot.AXIS_Y).setTickSpacing(1);

    panel.add(new InteractivePanel(plot), BorderLayout.CENTER);
} 
  

Ответ №1:

Я нашел несколько хакерское исправление, которое работает в промежуточный период:

GRAL определяет высоту оси с помощью DataTable . Он использует максимальные и минимальные значения таблицы для определения области просмотра.

Итак, если вы добавите две части данных:

DataTable.add(x,minY)

DataTable.add(x,maxY)

На графике будут некоторые ложные данные, но окно просмотра изменит размер до желаемой оси. Поскольку эти точки добавляются в конце, они, как правило, несколько затемняются, и их легко игнорировать.

Ответ №2:

У меня сработал следующий метод:

 plot.getAxis(XYPlot.AXIS_X).setRange(0.0, 4.0);
plot.getAxis(XYPlot.AXIS_Y).setRange(0.0, 20.0);