【问题标题】:How to set logarithmic scale for domain and range axis in XYLineChart如何在 XYLineChart 中设置域和范围轴的对数刻度
【发布时间】:2018-12-22 12:37:57
【问题描述】:

有没有办法设置x轴和y轴的对数刻度。

我在下面添加了用于创建图表的代码以供参考。

XyLineChartBuilder lineBuilder = DynamicReports.cht.xyLineChart()
    .setTitle(reportSection.getGraphName())
    .setTitleFont(boldFont)
    .setXValue(xColumn)
    .series(yAxisLineSeries)
    .setXAxisFormat(DynamicReports.cht.axisFormat()
    .setLabel(reportSection.getxAxisCaption()))
    .setYAxisFormat(DynamicReports.cht.axisFormat()
    .setLabel(reportSection.getyAxisCaption()))
    .setDataSource(createDataSource(reportSection, noOfYaxis));

【问题讨论】:

  • 您使用的是哪个对数轴?如here 所述,您可以选择。
  • 我尝试了以 10 为底和以 2 为底。但两者都没有绘制负值。

标签: java jasper-reports jfreechart dynamic-reports


【解决方案1】:

我尝试了以 10 为底和以 2 为底,但两者都没有绘制负值。

LogarithmicAxis 提供了一个setAllowNegativesFlag() 方法,可以将其设置为“true 允许数据中的负值”或“false 能够绘制任意接近零的正值”。我改编了这个example 来说明效果。

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.LogarithmicAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/**
 * @See https://stackoverflow.com/a/53912014/230513
 * @see https://stackoverflow.com/a/22450677/230513
 * @see https://stackoverflow.com/a/10353270/230513
 */
public class Test {

    private static final int N = 10;

    private void display() {
        XYSeries series = new XYSeries("Series");
        for (int i = -N; i <= N; i++) {
            series.add(i, i);
        }
        LogarithmicAxis xAxis = new LogarithmicAxis("X");
        xAxis.setAllowNegativesFlag(true);
        LogarithmicAxis yAxis = new LogarithmicAxis("Y");
        yAxis.setAllowNegativesFlag(true);
        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 f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.add(new ChartPanel(chart) {

            @Override
            public Dimension getPreferredSize() {
                return new Dimension(700, 400);
            }
        });
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Test().display();
            }
        });
    }
}

【讨论】:

    猜你喜欢
    • 2012-03-03
    • 2019-08-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-04
    • 2015-01-17
    • 2013-02-21
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多