jfreechart 折线图如何设置横坐标每隔n个坐标值显示一次
时间: 2024-03-12 19:47:59 浏览: 23
你可以使用 `org.jfree.chart.axis.NumberAxis` 类的 `setTickUnit` 方法来设置坐标轴的间隔。例如,如果你想要每隔2个坐标值显示一次横坐标,可以这样设置:
```
NumberAxis xAxis = (NumberAxis) plot.getDomainAxis();
xAxis.setTickUnit(new NumberTickUnit(2));
```
其中,`plot` 是你的折线图对象。这样设置后,折线图的横坐标轴就会按照每隔2个坐标值显示一次。你可以根据需要调整 `setTickUnit` 方法中的参数来实现不同的间隔设置。
相关问题
jfreechart 新建一个折线图并设置横坐标每隔n个坐标值显示一次
以下是使用 JFreeChart 创建折线图并设置横坐标每隔 n 个坐标值显示一次的示例代码:
```java
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.DefaultXYDataset;
public class LineChartExample {
public static void main(String[] args) {
// 新建 XY 数据集
DefaultXYDataset dataset = new DefaultXYDataset();
double[][] data = new double[][] {{1, 2, 3, 4, 5}, {3, 4, 2, 6, 8}};
dataset.addSeries("Series 1", data);
// 创建折线图
JFreeChart chart = ChartFactory.createXYLineChart(
"Line Chart Example", // 图表标题
"X", // 横坐标标签
"Y", // 纵坐标标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向
true, // 是否显示图例
true, // 是否生成工具提示
false // 是否生成 URLs
);
// 设置横坐标间隔
NumberAxis xAxis = (NumberAxis) ((XYPlot) chart.getPlot()).getDomainAxis();
xAxis.setTickUnit(new NumberTickUnit(2));
// 显示图表
ChartFrame frame = new ChartFrame("Line Chart Example", chart);
frame.pack();
frame.setVisible(true);
}
}
```
在该示例中,首先创建了一个 `DefaultXYDataset` 对象,并向其中添加了一组数据。然后使用 `ChartFactory` 类的 `createXYLineChart` 静态方法创建了一个折线图,设置了图表标题、横坐标标签、纵坐标标签、数据集等属性。接着,获取折线图的横坐标轴对象,并使用 `setTickUnit` 方法设置了横坐标的间隔为 2。最后,使用 `ChartFrame` 类创建了一个窗口,并在其中显示了折线图。
JFreeChart 折线图中,鼠标移动上去显示坐标信息。
要在 JFreeChart 折线图中实现鼠标移动上去显示坐标信息,可以使用 ChartMouseListener 接口和 ChartPanel 类。具体步骤如下:
1. 创建 ChartMouseListener 接口的实现类,重写 chartMouseMoved 方法,在该方法中获取鼠标所在的坐标值,并将其显示在界面上。
2. 创建 ChartPanel 对象,并添加 ChartMouseListener 实现类的实例到 ChartPanel 中。
3. 将 ChartPanel 对象添加到界面中。
下面是一个示例代码,演示如何在 JFreeChart 折线图中实现鼠标移动上去显示坐标信息:
```java
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.JFrame;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class LineChartDemo extends JFrame {
public LineChartDemo(String title) {
super(title);
// 创建数据集
XYDataset dataset = createDataset();
// 创建图表
JFreeChart chart = createChart(dataset);
// 创建 ChartPanel 对象
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new Dimension(500, 300));
chartPanel.addChartMouseListener(new MyChartMouseListener(chartPanel));
// 添加 ChartPanel 到界面中
getContentPane().add(chartPanel, BorderLayout.CENTER);
}
private XYDataset createDataset() {
XYSeries series = new XYSeries("Random Data");
for (int i = 0; i < 100; i++) {
series.add(i, Math.random() * 100);
}
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
return dataset;
}
private JFreeChart createChart(XYDataset dataset) {
// 创建图表
JFreeChart chart = ChartFactory.createXYLineChart(
"Line Chart Demo", // chart title
"X", // x axis label
"Y", // y axis label
dataset, // data
null, // no legend
true, // tooltips
false // no URLs
);
// 设置背景颜色
chart.setBackgroundPaint(Color.white);
// 获取图表的绘图区域
XYPlot plot = (XYPlot) chart.getPlot();
// 设置绘图区域的背景颜色
plot.setBackgroundPaint(Color.lightGray);
// 设置绘图区域的网格线颜色
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
// 设置绘图区域的轴线颜色
plot.setDomainAxis(new NumberAxis());
plot.setRangeAxis(new NumberAxis());
plot.getDomainAxis().setLabelPaint(Color.white);
plot.getRangeAxis().setLabelPaint(Color.white);
// 设置绘图区域的线条颜色
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
renderer.setSeriesPaint(0, Color.blue);
renderer.setSeriesShapesVisible(0, true);
plot.setRenderer(renderer);
return chart;
}
private class MyChartMouseListener implements ChartMouseListener {
private ChartPanel chartPanel;
public MyChartMouseListener(ChartPanel chartPanel) {
this.chartPanel = chartPanel;
}
public void chartMouseClicked(ChartMouseEvent event) {
// do nothing
}
public void chartMouseMoved(ChartMouseEvent event) {
int x = event.getTrigger().getX();
int y = event.getTrigger().getY();
double chartX = chartPanel.getChart().getXYPlot().getDomainAxis().java2DToValue(x, chartPanel.getScreenDataArea());
double chartY = chartPanel.getChart().getXYPlot().getRangeAxis().java2DToValue(y, chartPanel.getScreenDataArea());
System.out.println("x=" + chartX + ", y=" + chartY);
}
}
public static void main(String[] args) {
LineChartDemo demo = new LineChartDemo("Line Chart Demo");
demo.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
demo.pack();
demo.setVisible(true);
}
}
```
这样,在鼠标移动到折线图上时,就会在控制台输出当前鼠标所在的坐标值。你可以根据实际需求,将坐标值显示在界面的合适位置上。