我有两个XYChart
我想垂直对齐显示。
这两个图共享相同的 x 轴,但它们使用不同的数据集,这些值不在同一数量级。这使得 y 轴标签的大小差异很大。最终,两个x轴不再对齐。
我的目标是对齐这些 x 轴。
一种建议的解决方案提供了一种解决方法,即旋转 y 轴标签,使标签宽度相同。虽然这有效(并且我感谢贡献者的回答),但这并不完全令人满意:一旦我有不同大小的图例,我就会面临同样的问题(请参阅这个问题在 R 中,找到了几个令人满意的解决方案)。
我真的很想保持标签方向不变并“玩”图表组件的大小。
为了重现性,这里是一个由Oracle 的教程:
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.chart.CategoryAxis;
import javafx.scene.chart.LineChart;
import javafx.scene.chart.NumberAxis;
import javafx.scene.chart.XYChart;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class Test extends Application {
@Override
public void start(Stage stage) {
stage.setTitle("Line Chart Sample");
final CategoryAxis xAxis1 = new CategoryAxis();
final NumberAxis yAxis1 = new NumberAxis();
xAxis1.setLabel("Month");
final LineChart<String, Number> lineChart1 =
new LineChart<>(xAxis1, yAxis1);
final CategoryAxis xAxis2 = new CategoryAxis();
xAxis2.setLabel("Month");
final NumberAxis yAxis2 = new NumberAxis();
final LineChart<String, Number> lineChart2 =
new LineChart<>(xAxis2, yAxis2);
lineChart1.setTitle("Charts");
lineChart1.setLegendVisible(false);
lineChart2.setLegendVisible(false);
XYChart.Series series1 = new XYChart.Series();
series1.setName("Portfolio 1");
series1.getData().add(new XYChart.Data("Jan", 23));
series1.getData().add(new XYChart.Data("Feb", 14));
series1.getData().add(new XYChart.Data("Mar", 15));
series1.getData().add(new XYChart.Data("Apr", 24));
series1.getData().add(new XYChart.Data("May", 34));
series1.getData().add(new XYChart.Data("Jun", 36));
series1.getData().add(new XYChart.Data("Jul", 22));
series1.getData().add(new XYChart.Data("Aug", 45));
series1.getData().add(new XYChart.Data("Sep", 43));
series1.getData().add(new XYChart.Data("Oct", 17));
series1.getData().add(new XYChart.Data("Nov", 29));
series1.getData().add(new XYChart.Data("Dec", 25));
XYChart.Series series2 = new XYChart.Series();
series2.setName("Portfolio 2");
series2.getData().add(new XYChart.Data("Jan", 330000));
series2.getData().add(new XYChart.Data("Feb", 340000));
series2.getData().add(new XYChart.Data("Mar", 250000));
series2.getData().add(new XYChart.Data("Apr", 440000));
series2.getData().add(new XYChart.Data("May", 390000));
series2.getData().add(new XYChart.Data("Jun", 160000));
series2.getData().add(new XYChart.Data("Jul", 550000));
series2.getData().add(new XYChart.Data("Aug", 540000));
series2.getData().add(new XYChart.Data("Sep", 480000));
series2.getData().add(new XYChart.Data("Oct", 270000));
series2.getData().add(new XYChart.Data("Nov", 370000));
series2.getData().add(new XYChart.Data("Dec", 290000));
lineChart1.getData().addAll(series1);
lineChart2.getData().addAll(series2);
VBox vBox = new VBox();
vBox.addAll(lineChart1, lineChart2);
Scene scene = new Scene(gridPane, 800, 600);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
结果如下:
是否可以控制图表组件的大小,使两个x轴对齐?
我尝试更改 y 轴的首选宽度和最小宽度,但似乎不起作用。
我现在正在使用 Java 8。如有必要,可以迁移到 Java 9。
Edit:正如答案中所建议的,我已将这个问题的范围缩小到对齐 x 轴的问题。询问尺码问题here.