java numbertickunit_java – 对数轴标签/刻度定制

我正在使用JFreeChart API在我的Java应用程序中生成一些图表.在我的一个图表中,我尝试使用LogAxis对象通过以下代码使我的y轴成为对数刻度轴(图中的A):

LogAxis logAxis = new LogAxis("Price($)");

logAxis.setMinorTickMarksVisible(true);

logAxis.setAutoRange(true);

xyplot.setRangeAxis(logAxis);

然后我得到一个对数刻度的y轴,刻度为10 ^ n(如图A).我想让它像B一样,对用户来说更直观,并且每个间隔代表不同的值,如图所示,2-> 4,4-> 8,8-> 16,间隔增长为2 ^ n.不足之处在于,即使它们代表不同的值,间隔也会显示相同的宽度.但是,当O尝试通过以下代码实现此目的时:

LogAxis logAxis = new LogAxis("Price($)");

logAxis.setBase(2);

logAxis.setTickUnit(new NumberTickUnit(2));

logAxis.setMinorTickMarksVisible(true);

logAxis.setAutoRange(true);

xyplot.setRangeAxis(logAxis);

我得到的是图C.

我怎样才能达到图B?

最佳答案

即使您使用的是LogAxis,也可以指定整数刻度单位,如下面@ amaidment示例的变体所示.

/** @see https://stackoverflow.com/a/10353270/230513 */

private static void createFrame() {

XYSeries series = new XYSeries("Series");

for (int i = 0; i <= N; i++) {

series.add(i, Math.pow(2, i));

}

NumberAxis xAxis = new NumberAxis("X");

xAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

LogAxis yAxis = new LogAxis("Y");

yAxis.setBase(2);

yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

XYPlot plot = new XYPlot(new XYSeriesCollection(series),

xAxis, yAxis, new XYLineAndShapeRenderer(true, false));

JFreeChart chart = new JFreeChart(

"Chart", JFreeChart.DEFAULT_TITLE_FONT, plot, false);

JFrame frame = new JFrame("LogAxis Test");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setContentPane(new ChartPanel(chart));

frame.pack();

frame.setVisible(true);

}

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

createFrame();

}

});

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值