如何在XYLineChart中设置域和范围轴的对数刻度
How to set logarithmic scale for domain and range axis in XYLineChart
有没有办法设置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));
I tried with base 10 and base 2, but both didn't plot negative values.
LogarithmicAxis
provides a setAllowNegativesFlag()
method, which may be set "true
to allow negative values in data," or "false
to be able to plot positive values arbitrarily close to zero." I've adapted this 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
* @see
* @see
*/
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();
}
});
}
}
有没有办法设置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));
I tried with base 10 and base 2, but both didn't plot negative values.
LogarithmicAxis
provides a setAllowNegativesFlag()
method, which may be set "true
to allow negative values in data," or "false
to be able to plot positive values arbitrarily close to zero." I've adapted this 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
* @see
* @see
*/
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();
}
});
}
}