GRAL - 轴样式 - 在绘图中保持相同的Y轴

时间:2014-06-30 22:57:06

标签: java charts plot axis-labels

我有一个用GRAL创建的情节:

GRAL plot

我遇到的问题与轴有关。基本上我希望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);
} 

2 个答案:

答案 0 :(得分:0)

我发现了一个有点过时的修复工作:

GRAL使用DataTable决定轴高。它使用表的max和min值来定义视口。

所以如果你添加两个数据:

DataTable.add(x,minY)

DataTable.add(x,maxY)

它们会在图表上显示一些虚假数据,但视口会自行调整大小到您想要的轴。由于这些点在最后添加,它们往往会有些模糊,容易被忽略。

答案 1 :(得分:0)

以下方法对我有用:

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