io.fair_acc.sample.chart.TimeAxisSample Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of samples Show documentation
Show all versions of samples Show documentation
Small sample applications to showcase the features of the chart-fx library.
The newest version!
package io.fair_acc.sample.chart;
import javafx.application.Application;
import javafx.application.Platform;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
import io.fair_acc.chartfx.XYChart;
import io.fair_acc.chartfx.axes.AxisLabelOverlapPolicy;
import io.fair_acc.chartfx.axes.spi.DefaultNumericAxis;
import io.fair_acc.chartfx.plugins.DataPointTooltip;
import io.fair_acc.chartfx.plugins.EditAxis;
import io.fair_acc.chartfx.plugins.Zoomer;
import io.fair_acc.dataset.spi.DefaultErrorDataSet;
import io.fair_acc.dataset.utils.ProcessingProfiler;
/**
* @author rstein
*/
public class TimeAxisSample extends ChartSample {
private static final int N_SAMPLES = 10_000; // default: 10000
private static void generateData(final DefaultErrorDataSet dataSet) {
final long startTime = ProcessingProfiler.getTimeStamp();
dataSet.clearData();
final double now = System.currentTimeMillis() / 1000.0 + 1; // N.B. '+1'
// to check
// for
// resolution
for (int n = 0; n < TimeAxisSample.N_SAMPLES; n++) {
double t = now + n * 10;
t *= +1;
final double y = 100 * Math.cos(Math.PI * t * 0.0005) + 0 * 0.001 * (t - now) + 0 * 1e4;
final double ex = 0.1;
final double ey = 10;
dataSet.add(t, y, ex, ey);
}
ProcessingProfiler.getTimeDiff(startTime, "adding data into DataSet");
}
@Override
public Node getChartPanel(final Stage primaryStage) {
ProcessingProfiler.setVerboseOutputState(true);
ProcessingProfiler.setLoggerOutputState(true);
ProcessingProfiler.setDebugState(false);
final BorderPane root = new BorderPane();
final Scene scene = new Scene(root, 800, 600);
final DefaultNumericAxis xAxis1 = new DefaultNumericAxis("time", "iso");
xAxis1.setOverlapPolicy(AxisLabelOverlapPolicy.SKIP_ALT);
final DefaultNumericAxis yAxis1 = new DefaultNumericAxis("y-axis", "a.u.");
final XYChart chart = new XYChart(xAxis1, yAxis1);
chart.legendVisibleProperty().set(true);
chart.getPlugins().add(new Zoomer());
chart.getPlugins().add(new EditAxis());
chart.getPlugins().add(new DataPointTooltip());
// set them false to make the plot faster
chart.setAnimated(false);
xAxis1.setAutoRangeRounding(false);
// xAxis1.invertAxis(true); TODO: bug inverted time axis crashes when zooming
xAxis1.setTimeAxis(true);
yAxis1.setAutoRangeRounding(true);
final DefaultErrorDataSet dataSet = new DefaultErrorDataSet("TestData");
generateData(dataSet);
long startTime = ProcessingProfiler.getTimeStamp();
chart.getDatasets().add(dataSet);
ProcessingProfiler.getTimeDiff(startTime, "adding data to chart");
startTime = ProcessingProfiler.getTimeStamp();
root.setCenter(chart);
ProcessingProfiler.getTimeDiff(startTime, "adding chart into StackPane");
return root;
}
/**
* @param args the command line arguments
*/
public static void main(final String[] args) {
Application.launch(args);
}
}