java - 为什么 JavaFX 图表会根据轴缩小?

标签 java javafx

假设我有一个简单的 ScatterChart 示例,如此处发布的

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.ScatterChart;
import javafx.scene.chart.XYChart;
import javafx.scene.chart.XYChart.Series;

public class AutoAlignment extends Application {

        private void init(Stage primaryStage) {

            Group root = new Group();
            primaryStage.setScene(new Scene(root));
            CategoryAxis xAxis = new CategoryAxis();
            NumberAxis yAxis = new NumberAxis(58.7,59.35,0.1);
            xAxis.setTickLabelRotation( 360 );
            xAxis.setLabel( "Time" );
            yAxis.setLabel( "Price" );

            Series test = new ScatterChart.Series("Series 1", FXCollections.<ScatterChart.Data>observableArrayList());
            test.getData().addAll(                new XYChart.Data("11:44",59.23),
                    new XYChart.Data("11:45",59.28),
                    new XYChart.Data("11:46",59.23),
                    new XYChart.Data("11:47",59.2),
                    new XYChart.Data("11:48",59.14),
                    new XYChart.Data("11:49",59.15),
                    new XYChart.Data("11:50",59.19),
                    new XYChart.Data("11:51",59.15),
                    new XYChart.Data("11:52",59.13),
                    new XYChart.Data("11:53",59.2),
                    new XYChart.Data("11:54",59.15),
                    new XYChart.Data("11:55",59.16));

            ObservableList<XYChart.Series> data = FXCollections.observableArrayList(test); 
            ScatterChart chart = new ScatterChart(xAxis, yAxis, data);
            root.getChildren().add(chart);
        }

        @Override public void start(Stage primaryStage) throws Exception {
            init(primaryStage);
            primaryStage.show();
        }

        public static void main(String[] args) { launch(args); }
    }

使用较小的 y 轴范围,图表会缩小并在 y 轴标签和实际图表之间产生较大的空白间隙。

如果我删除 yAxis 参数并执行

NumberAxis yAxis = new NumberAxis();

然后图表就正常了。是什么导致图表以这种方式缩小,我该如何防止这种情况发生?我希望轴可以定制,但也不要像第一种情况那样缩小。谢谢。

最佳答案

看起来轴为可能包含大量小数位的标签留下了大量空间。

添加 tickLabelFormatter 似乎可以解决问题:

        yAxis.setTickLabelFormatter(new StringConverter<Number>() {

            @Override
            public String toString(Number object) {
                return String.format("%.1f", object.doubleValue());
            }

            @Override
            public Number fromString(String string) {
                return new Double(string);
            }

        });

关于java - 为什么 JavaFX 图表会根据轴缩小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31793414/

相关文章:

multithreading - 如何避免不在 FX 应用线程上; currentThread = JavaFX 应用程序线程错误?

java - 维基百科正则表达式匹配和替换

应用程序启动方法中未指定 Controller 的Javafx错误异常

java - Spring AOP AfterThrowing vs. Around Advice

java - Android - 从 ListView 中删除项目,但不从数据库中删除项目

JavaFX:可以从非 UI 线程安全地操纵节点的转换吗?

JavaFX 到 Android (com.android.ide.common.internal.LoggedErrorException)

java - 使用 JFoenix 的 JFXDialog

java - 取消签名已签名的 jar

java - 在 Amazon VPC 下使用 Amazon SES 服务发送电子邮件