如何设置JFreeChart X轴数据标题?
How to set the JFreeChart X axis data titles?
在此处附上我的代码片段,我使用的是来自图表工厂的 XYStepChart
。代码输出的 x-axis 比例显示为例如:05:30:00:00
、05:30:00:01
、05:30:00:00
。但我需要像 1,2,3,4 这样的值。
package org.jfree.chart.demo;
import java.awt.BasicStroke;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RefineryUtilities;
public class XYStepChartDemo
{
private ChartFrame frame = null;
private void displayChart() {
if (this.frame == null) {
final String title = "Trace";
final String xAxisLabel = "Tasks";
final String yAxisLabel = "Amplitude";
final XYDataset data = createStepXYDataset();
final JFreeChart chart = ChartFactory.createXYStepChart(
title,
xAxisLabel, yAxisLabel,
data,
PlotOrientation.VERTICAL,
true, // legend
true, // tooltips
false // urls
);
chart.setBackgroundPaint(new Color(216, 216, 216));
final XYPlot plot = chart.getXYPlot();
plot.getRenderer().setSeriesStroke(0, new BasicStroke(2.0f));
plot.getRenderer().setSeriesStroke(1, new BasicStroke(2.0f));
this.frame = new ChartFrame("Plan Comparison", chart);
this.frame.pack();
RefineryUtilities.positionFrameRandomly(this.frame);
this.frame.setVisible(true);
}
else {
this.frame.setVisible(true);
this.frame.requestFocus();
}
}
public static XYDataset createStepXYDataset() {
final XYSeries series1 = new XYSeries("Series 2");
series1.add(0, 5);
series1.add(1, 0);
series1.add(2, 0);
series1.add(3, 0);
series1.add(4, 0);
series1.add(5, 5);
series1.add(6, 0);
series1.add(7, 0);
series1.add(8, 0);
final XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
return dataset;
}
public static void main(final String[] args) {
final XYStepChartDemo demo = new XYStepChartDemo();
demo.displayChart();
}
}
ChartFactory.createXYStepChart
uses a DateAxis
for the domain, so your XYSeries
ordinates are interpreted as seconds since the Java epoch。你也可以,
使用 setDateFormatOverride()
将值格式化为 here。
在XYPlot
上使用setDomainAxis()
将域名替换为NumberAxis
,也建议here; use integer tick units, as suggested here.
NumberAxis domain = new NumberAxis(xAxisLabel);
domain.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
plot.setDomainAxis(domain);
在此处附上我的代码片段,我使用的是来自图表工厂的 XYStepChart
。代码输出的 x-axis 比例显示为例如:05:30:00:00
、05:30:00:01
、05:30:00:00
。但我需要像 1,2,3,4 这样的值。
package org.jfree.chart.demo;
import java.awt.BasicStroke;
import java.awt.Color;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RefineryUtilities;
public class XYStepChartDemo
{
private ChartFrame frame = null;
private void displayChart() {
if (this.frame == null) {
final String title = "Trace";
final String xAxisLabel = "Tasks";
final String yAxisLabel = "Amplitude";
final XYDataset data = createStepXYDataset();
final JFreeChart chart = ChartFactory.createXYStepChart(
title,
xAxisLabel, yAxisLabel,
data,
PlotOrientation.VERTICAL,
true, // legend
true, // tooltips
false // urls
);
chart.setBackgroundPaint(new Color(216, 216, 216));
final XYPlot plot = chart.getXYPlot();
plot.getRenderer().setSeriesStroke(0, new BasicStroke(2.0f));
plot.getRenderer().setSeriesStroke(1, new BasicStroke(2.0f));
this.frame = new ChartFrame("Plan Comparison", chart);
this.frame.pack();
RefineryUtilities.positionFrameRandomly(this.frame);
this.frame.setVisible(true);
}
else {
this.frame.setVisible(true);
this.frame.requestFocus();
}
}
public static XYDataset createStepXYDataset() {
final XYSeries series1 = new XYSeries("Series 2");
series1.add(0, 5);
series1.add(1, 0);
series1.add(2, 0);
series1.add(3, 0);
series1.add(4, 0);
series1.add(5, 5);
series1.add(6, 0);
series1.add(7, 0);
series1.add(8, 0);
final XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
return dataset;
}
public static void main(final String[] args) {
final XYStepChartDemo demo = new XYStepChartDemo();
demo.displayChart();
}
}
ChartFactory.createXYStepChart
uses a DateAxis
for the domain, so your XYSeries
ordinates are interpreted as seconds since the Java epoch。你也可以,
使用
setDateFormatOverride()
将值格式化为 here。在
XYPlot
上使用setDomainAxis()
将域名替换为NumberAxis
,也建议here; use integer tick units, as suggested here.NumberAxis domain = new NumberAxis(xAxisLabel); domain.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); plot.setDomainAxis(domain);