I am new to JFreeChart. I have created line chart using JFreeChart. Now, I want to add additional details about the chart out side of the graph (ie on Left side and the Bottom of the graph). Also, I want to save the generated graph with all the information. Could any body help me out here.
package hh;
import java.awt.BorderLayout;
import java.awt.Color;
import java.io.File;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.renderer.xy.XYSplineRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
public class XYLineChartExample extends JFrame {
// double x=1.08,y=0.370;
JFreeChart chart;
public XYLineChartExample() {
super("XY Line Chart Example with JFreechart");
JPanel chartPanel = createChartPanel();
add(chartPanel, BorderLayout.CENTER);
setSize(1240, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
}
private JPanel createChartPanel() {
String chartTitle = "Objects Movement Chart";
String xAxisLabel = "X";
String yAxisLabel = "Y";
XYDataset dataset = createDataset();
JFreeChart chart = ChartFactory.createXYLineChart(chartTitle,
xAxisLabel, yAxisLabel, dataset);
XYPlot plot = chart.getXYPlot();
XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();
plot.setRenderer(renderer);
renderer.setSeriesPaint(2, Color.RED);
renderer.setSeriesPaint(3, Color.BLACK);
renderer.setSeriesPaint(4, Color.BLACK);
renderer.setSeriesPaint(5, Color.BLUE);
renderer.setSeriesPaint(6, Color.RED);
File imageFile = new File(
"C:/Users/varinder/Desktop/Graphs/Branch1_Grap.jpg");
int width = 1240;
int height = 500;
try {
ChartUtilities.saveChartAsJPEG(imageFile, chart, width, height);
} catch (IOException ex) {
System.err.println(ex);
}
return new ChartPanel(chart);
}
private XYDataset createDataset() {
XYSeriesCollection dataset = new XYSeriesCollection();
XYSeries series = new XYSeries("Object 1");
XYSeries series2 = new XYSeries("Object 2");
XYSeries series3 = new XYSeries("Object 3");
XYSeries series4 = new XYSeries("Object 4");
XYSeries series5 = new XYSeries("Object 5");
XYSeries series6 = new XYSeries("Object 6");
XYSeries series7 = new XYSeries("Object 7");
// fixed X axis
series.add(.10, .000);
series.add(.20, .000);
series.add(.30, .000);
series.add(.40, .000);
series.add(.50, .000);
series.add(.60, .000);
series.add(.70, .000);
series.add(.80, .000);
series.add(.90, .000);
series.add(1.00, .000);
series.add(1.10, .000);
series.add(1.20, .000);
series.add(1.30, .000);
series.add(1.40, .000);
series.add(1.50, .000);
series.add(1.60, .000);
series.add(1.70, .000);
series.add(1.80, .000);
series.add(1.90, .000);
series.add(2.00, .000);
series.add(2.10, .000);
series.add(2.20, .000);
series.add(2.30, .000);
series.add(2.30, .000);
series.add(2.40, .000);
series.add(2.50, .000);
series.add(2.60, .000);
series.add(2.70, .000);
series.add(2.80, .000);
series.add(2.90, .000);
series.add(3.00, .000);
series.add(3.10, .000);
series.add(3.20, .000);
series.add(3.30, .000);
series.add(3.40, .000);
series.add(3.50, .000);
series.add(3.60, .000);
// series.add(3.70, .000);
// fixed Y axis
series2.add(.00, .100);
series2.add(.00, .200);
series2.add(.00, .300);
series2.add(.00, .400);
series2.add(.00, .500);
series2.add(.00, .600);
series2.add(.00, .700);
series2.add(.00, .800);
series2.add(.00, .900);
series2.add(.00, 1.000);
series2.add(.00, 1.100);
series2.add(.00, 1.200);
// Bed level with red color
// series2.add(0, 193.500);
// series3.add(1.92, 100.370);
series3.add(0.88, 0.900);
series3.add(2.12, 0.900);
series3.add(0.75, 0.900);
series3.add(2.25, 0.900);
series3.add(0.59, 0.300);
series3.add(2.41, 0.300);
series3.add(0.00, 0.300);
series3.add(3.1, .300);
series4.add(0.88, 0.304);
series4.add(2.12, 0.304);
series4.add(0.879, 0.876);// one decrease
series4.add(2.12, 0.876);
series5.add(0.88, 0.876);
series5.add(1.109, 0.876);
series5.add(1.109, 0.376);
series6.add(2.12, 0.876);
series6.add(1.891, 0.876);
series6.add(1.890, 0.376);
series6.add(1.109, 0.376);
series7.add(1.109, 0.876);// sement area by adding 0.1.
series7.add(1.119, 0.876);
series7.add(1.119, 0.386);
series7.add(1.881, 0.386);
series7.add(1.881, 0.876);
series7.add(1.891, 0.876);
// series7.add(1.11, 0.);
dataset.addSeries(series);
dataset.addSeries(series2);
dataset.addSeries(series3);
dataset.addSeries(series4);
dataset.addSeries(series5);
dataset.addSeries(series6);
dataset.addSeries(series7);
return dataset;
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new XYLineChartExample().setVisible(true);
}
});
}
}
For the axes, better use loops to make the code cleaner :
for(double i=0;i<3.70;i+=0.1){ series.add(i,0.0) }
for( i=0;i<1.2;i+=0.1){ series2.add(0.0,i) }
I personnaly use JavaFX and not the older version swing with Jelement, so you can use a BorderPane ( https://docs.oracle.com/javase/8/javafx/api/javafx/scene/layout/BorderPane.html you get a picture here) so you can put some elements around (and put borderpane in one area, with scene builder the possibilities are bigger ( http://code.makery.ch/library/javafx-8-tutorial/fr/part1/ )
EDIT : https://code.lds.org/nexus/content/sites/maven-sites/stack/modules/swing/1.1.1/apidocs/org/lds/stack/swing/BorderPane.html here is the swing version for you, a Jpanel with the setNorthComponent/south/... methods ;)
EDIT2 :
here is, be careful to have the good name for your class "Launcher" if it isn't it won't work, you can then add controllers for the button
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.control.Button;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
/**
* Class that starts the application, contains the primary stage.
*/
public class Launcher extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
BorderPane pane = new BorderPane();
primaryStage.setTitle("Line Chart");
//defining the axes
final NumberAxis xAxis = new NumberAxis();
final NumberAxis yAxis = new NumberAxis();
xAxis.setLabel("Time");
//creating the chart
final LineChart<Number,Number> lineChart =
new LineChart<Number,Number>(xAxis,yAxis);
lineChart.setTitle("Test");
//defining a series
XYChart.Series series = new XYChart.Series();
XYChart.Series series1 = new XYChart.Series();
XYChart.Series series2= new XYChart.Series();
XYChart.Series series3 = new XYChart.Series();
XYChart.Series series4 = new XYChart.Series();
XYChart.Series series5 = new XYChart.Series();
XYChart.Series series6 = new XYChart.Series();
XYChart.Series series7 = new XYChart.Series();
double i;
for(i=0;i<3.70;i+=0.1){
series.getData().add(new XYChart.Data(i,0.0));
}
for(i=0;i<1.2;i+=0.1){
series2.getData().add(new XYChart.Data(0.0,i));
}
// Bed level with red color
// series2.add(0, 193.500);
// series3.add(1.92, 100.370);
series3.getData().add(new XYChart.Data(0.88, 0.900));
series3.getData().add(new XYChart.Data(2.12, 0.900));
series3.getData().add(new XYChart.Data(0.75, 0.900));
series3.getData().add(new XYChart.Data(2.25, 0.900));
series3.getData().add(new XYChart.Data(0.59, 0.300));
series3.getData().add(new XYChart.Data(2.41, 0.300));
series3.getData().add(new XYChart.Data(0.00, 0.300));
series3.getData().add(new XYChart.Data(3.1, .300));
series4.getData().add(new XYChart.Data(0.88, 0.304));
series4.getData().add(new XYChart.Data(2.12, 0.304));
series4.getData().add(new XYChart.Data(0.879, 0.876));// one decrease
series4.getData().add(new XYChart.Data(2.12, 0.876));
series5.getData().add(new XYChart.Data(0.88, 0.876));
series5.getData().add(new XYChart.Data(1.109, 0.876));
series5.getData().add(new XYChart.Data(1.109, 0.376));
series6.getData().add(new XYChart.Data(2.12, 0.876));
series6.getData().add(new XYChart.Data(1.891, 0.876));
series6.getData().add(new XYChart.Data(1.890, 0.376));
series6.getData().add(new XYChart.Data(1.109, 0.376));
series7.getData().add(new XYChart.Data(1.109, 0.876));// sement area by adding 0.1.
series7.getData().add(new XYChart.Data(1.119, 0.876));
series7.getData().add(new XYChart.Data(1.119, 0.386));
series7.getData().add(new XYChart.Data(1.881, 0.386));
series7.getData().add(new XYChart.Data(1.881, 0.876));
series7.getData().add(new XYChart.Data(1.891, 0.876));
// series7.add(1.11, 0.);
//A vertical Box
VBox box=new VBox();
//Add some example of button into
box.getChildren().addAll(new Button("Cut"), new Button("Copy"), new Button("Paste"));
lineChart.setCreateSymbols(false);
//Add all the series to the chart
lineChart.getData().addAll(series,series1,series2, series3,series4,series5,series6,series7);
//Add the chart in the center of the pane
pane.setCenter(lineChart);
//add the vbox (with the button) to the right
pane.setRight(box);
Scene scene = new Scene(pane,800,600);
primaryStage.setScene(scene);
primaryStage.show();
primaryStage.setTitle("Test");
primaryStage.centerOnScreen();
}
public static void main (String[] args) {
launch(args);
}
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.