javafx - 如何平移 JavaFX LineChart
问题描述
在 JavaFx 中,我有一个 LineChart lc
,我为其创建并添加了一个系列,
lc.getData().addAll(series1);
它显示得很好,但似乎对所有数据点进行采样以将整个域放入图表中。
有没有办法强制 LineChart 只显示系列的最后 10 个数据点?
最终,我想创建一种平移图表内容的方法,以便显示数据窗口,作为平移位置的函数。
我找到了这个 SO 帖子,但它删除了数据,这意味着我需要将其添加回来。如果可能,我宁愿保留系列中的所有数据,并尽可能设置该系列的可用范围。
解决方案
我使用标准的 fx 库自己制定了解决方案。
只要横轴是 a NumberAxis
,就可以使用setLowerBound()
和setUpperBound()
函数。
结合滚动条,这完美地工作。
例如,
final static int MAX_DISPLAY = 100
LineChart<Number, Number> lineChart;
ScrollBar scroller;
scroller.setMin(0);
scroller.setMax(1000 - MAX_DISPLAY);
scroller.valueProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observableValue, Number number, Number t1) {
double pos = scroller.getValue();
NumberAxis na = (NumberAxis)lineChart.getXAxis();
na.setLowerBound(pos);
na.setUpperBound(pos + MAX_DISPLAY);
}
});
注意 - 如果使用 Scene Builder,您的 LineChart x 轴将默认为 CatergoryAxis,因此请确保编辑 .fxml 文件并将其手动更改为 NumberAxis。
此外,对于我的用例,因为 x 轴代表 Unix 纪元时间,您可以Number
使用以下代码(在我的情况下为日期格式的字符串)将值转换为其他值,
NumberAxis xAxis = (NumberAxis)lineChart.getXAxis();
xAxis.setTickLabelFormatter(new StringConverter<Number>() {
@Override
public String toString(Number object) {
return convertToDate(object.longValue());
}
@Override
public Number fromString(String string) {
return 0;
}
});
推荐阅读
- amazon-web-services - 导入的私有证书无法链接到 AWS 中的 Api 网关
- solr - solr.MinFieldValueUpdateProcessorFactory 因浮点值比较失败
- twitter-bootstrap - 将全宽图像与右侧的 SVG 蒙版对齐,使用 Bootstrap 将外部容器对齐
- mp3 - 传输编码:分块和 MP3/Lame
- azure-cosmosdb - CosmosDB 分区和更新属性
- javascript - res.render 没有按预期工作?不加载新页面
- java - 内部和子类之间的创建差异
- mule - DataWeave 2 - 使用数组项标签将 Java ArrayList 转换为 XML
- python - 为什么我写的代码不能正常工作?
- r - 如何在闲置时阻止 RSelenium 浏览器自动关闭?