Hallo,
ich habe in JavaFX einen LineChart. Als Datenpunkte habe ich die standardmäßigen Kreise welche für mich auch gut passen.
Die y-Achse sollte von 0 bis 100 sein und die x-Achse von 0 bis einen variablen Wert (im Beispiel vereinfacht fix).
Jetzt habe ich das Problem, dass die Kreise der Datenpunkte an den Rändern abgeschnitten werden.
Ok, dies wollte ich einfach durch das ändern der Range beheben. Dadurch ergibt sich aber das Problem, dass die TicksMarker nicht mehr bei 0 beginnen und auch "krumme" Zahlen bekommen.
Wie kann ich dies beheben?
Mein Ansatz war den Formatter und das Visible flag zu ändern. Führt aber leider nicht zum gewünschten Erfolg.
Gibt es einen anderen Ansatz, damit die Kreise nicht abgeschnitten werden?
Zusatz-Hinweis: Im gesamten Projekt, ist auch noch eine Linie über die ganze y-Höhe am x Punkt 0 eingezeichnet, welche nicht sichtbar ist wenn die X Achse erst bei 0 anfängt.
ich habe in JavaFX einen LineChart. Als Datenpunkte habe ich die standardmäßigen Kreise welche für mich auch gut passen.
Die y-Achse sollte von 0 bis 100 sein und die x-Achse von 0 bis einen variablen Wert (im Beispiel vereinfacht fix).
Jetzt habe ich das Problem, dass die Kreise der Datenpunkte an den Rändern abgeschnitten werden.
Ok, dies wollte ich einfach durch das ändern der Range beheben. Dadurch ergibt sich aber das Problem, dass die TicksMarker nicht mehr bei 0 beginnen und auch "krumme" Zahlen bekommen.
Wie kann ich dies beheben?
Mein Ansatz war den Formatter und das Visible flag zu ändern. Führt aber leider nicht zum gewünschten Erfolg.
Gibt es einen anderen Ansatz, damit die Kreise nicht abgeschnitten werden?
Zusatz-Hinweis: Im gesamten Projekt, ist auch noch eine Linie über die ganze y-Höhe am x Punkt 0 eingezeichnet, welche nicht sichtbar ist wenn die X Achse erst bei 0 anfängt.
Java:
package org.example;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.stage.Stage;
public class TickMarkExample extends Application {
@Override
public void start(Stage primaryStage) {
// X-Axis
NumberAxis xAxis = new NumberAxis(-0.1, 12.55, 0.1);
xAxis.setMinorTickVisible(false);
xAxis.setAnimated(false); // Disable animation for easier access to TickMarks
// Set new formatter for the x-axis to show only labels at 0, 0.1, ...
xAxis.setTickLabelFormatter(new NumberAxis.DefaultFormatter(xAxis) {
@Override
public String toString(Number object) {
// Round the value to one decimal place
var val = Math.round(object.doubleValue() * 10.0) / 10.0;
// Show labels only for values greater than or equal to 0
if (val >= 0.0) {
return String.valueOf(val);
}
return "";
}
});
// Y-Axis
NumberAxis yAxis = new NumberAxis(-2, 102, 5);
yAxis.setLabel("Y-Axis");
// Create LineChart
LineChart<Number, Number> lineChart = new LineChart<>(xAxis, yAxis);
lineChart.setTitle("Line Chart Example");
// Data
XYChart.Series<Number, Number> series = new XYChart.Series<>();
series.getData().add(new XYChart.Data<>(0, 0));
series.getData().add(new XYChart.Data<>(1, 10));
series.getData().add(new XYChart.Data<>(2, 100));
series.getData().add(new XYChart.Data<>(3, 0));
series.getData().add(new XYChart.Data<>(12.5, 100));
lineChart.getData().add(series);
// Create scene
Scene scene = new Scene(lineChart, 600, 400);
// Configure stage
primaryStage.setTitle("JavaFX LineChart Example");
primaryStage.setScene(scene);
primaryStage.show();
// Access the TickMarks of the X-Axis and change the visible flag
for (int i = 0; i < xAxis.getTickMarks().size(); i++) {
javafx.scene.chart.NumberAxis.TickMark<Number> tickMark = xAxis.getTickMarks().get(i);
double tickValue = tickMark.getValue().doubleValue();
// Set the visible flag to show the TickMark at 0 and hide for negative values
tickMark.setTextVisible(tickValue >= 0);
}
}
public static void main(String[] args) {
launch(args);
}
}