gpt4 book ai didi

java - 对数轴标签/刻度自定义

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:13 24 4
gpt4 key购买 nike

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

LogAxis logAxis = new LogAxis("Price($)");
logAxis.setMinorTickMarksVisible(true);
logAxis.setAutoRange(true);
xyplot.setRangeAxis(logAxis);

enter image description here

然后我得到一个对数刻度的 y 轴,刻度为 10^n(如图 A)。我想做成B那样,对用户来说更直观,每个区间代表不同的值,如图,2->4, 4->8, 8->16,区间增长为2^名词次要的是,即使它们代表不同的值,间隔也显示同样宽。但是,当 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 示例的变体所示。

LogAxis

/** @see http://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();
}
});
}

关于java - 对数轴标签/刻度自定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10347674/

24 4 0