- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
构建描述的 LineChart 需要 JavaFX 15 分钟,这对我的任务不起作用。
使用旧的 Swing 和 jFreeChart 的类似实现需要 1.5 秒来构建图表。
但我仍然想实现一个 JavaFX。
这是我的代码:
public class FXMLController implements Initializable {
@FXML
private Label statusbar;
@FXML
public LineChart lineChart;
@FXML
public Button connect;
@FXML
public MenuItem options;
@FXML
public NumberAxis xAxis;
@FXML
NumberAxis yAxis;
@FXML
private void connect(ActionEvent event) {
}
public static FileChooser fileChooser = new FileChooser();
public static String path;
public static XYChart.Series<Integer, Integer> dataSeries = new XYChart.Series<Integer, Integer>();
public static int y = 0;
public static XYChart.Data<Integer, Integer> data;
@FXML
private void open(ActionEvent event) {
fileChooser.setTitle("Open Resource File");
fileChooser.getExtensionFilters().addAll(
new ExtensionFilter("Text Files", "*.txt"),
new ExtensionFilter("Image Files", "*.png", "*.jpg", "*.gif"),
new ExtensionFilter("Audio Files", "*.wav", "*.mp3", "*.aac"),
new ExtensionFilter("All Files", "*.*"));
File selectedFile = fileChooser.showOpenDialog(new Stage());
if (selectedFile != null) {
path = selectedFile.getAbsolutePath();
System.out.println(path);
try {
ReadingFromFile.readFile(path);
} catch (IOException ex) {
Logger.getLogger(FXMLController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
@FXML
private void close(ActionEvent event) {
}
@FXML
private void getconnect(ActionEvent event) {
}
@Override
public void initialize(URL url, ResourceBundle rb) {
xAxis.setLabel("Tick");
xAxis.setTickUnit(100);
yAxis.setLabel("Signal");
xAxis.setForceZeroInRange(false);
lineChart.setLegendVisible(false);
lineChart.setCreateSymbols(false);
lineChart.setAnimated(false);
lineChart.getData().add(dataSeries);
}
}
public class ReadingFromFile extends FXMLController {
public static String s = null;
public static String[] str;
public static int parseInt;
public static void readFile(String filename)
throws IOException {
BufferedReader br = new BufferedReader(new FileReader(filename));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
System.out.println(line);
try {
str = line.split(" ");
for (int i = 0; i < str.length; i = i + 2) {
s = str[i + 1] + str[i];
parseInt = Integer.parseInt(s, 16);
javafx.application.Platform.runLater(new Runnable() {
@Override
public void run() {
data = new XYChart.Data<Integer, Integer>(y, parseInt);
//data.setNode(new HoveredThresholdNode(0, second, ""));
dataSeries.getData().add(data);
y++;
}
});
}
} catch (java.lang.NullPointerException ex) {
System.out.println("тут ноль!!!");
}
}
} finally {
br.close();
}
}
}
最佳答案
我遇到了类似的问题,每隔几秒钟向 LineChart 添加 100,000 个点。我们使用 Ramer–Douglas–Peucker algorithm 解决了它,这会在用户不注意的情况下减少线上的点数。我在 JTS topology suite 中找到了一个现成的实现在 LGPL 许可下。
这是我的测试代码。
public class ChartUpdate extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) {
NumberAxis xAxis = new NumberAxis(0, 50_000, 5000);
xAxis.setAutoRanging(false);
NumberAxis yAxis = new NumberAxis(-1, 1, 25);
yAxis.setAutoRanging(false);
LineChart<Number, Number> graph = new LineChart<>(xAxis, yAxis);
graph.setAnimated(false);
graph.setCreateSymbols(false);
graph.setLegendVisible(false);
Series<Number, Number> series = new Series<>();
stage.setScene(new Scene(graph));
GeometryFactory gf = new GeometryFactory();
long t0 = System.nanoTime();
Coordinate[] coordinates = new Coordinate[100_000];
for (int i = 0; i < coordinates.length; i++) {
coordinates[i] = new Coordinate(i, Math.sin(Math.toRadians(i / 100)));
}
Geometry geom = new LineString(new CoordinateArraySequence(coordinates), gf);
Geometry simplified = DouglasPeuckerSimplifier.simplify(geom, 0.00001);
List<Data<Number, Number>> update = new ArrayList<Data<Number, Number>>();
for (Coordinate each : simplified.getCoordinates()) {
update.add(new Data<>(each.x, each.y));
}
long t1 = System.nanoTime();
System.out.println(String.format("Reduces points from %d to %d in %.1f ms", coordinates.length, update.size(),
(t1 - t0) / 1e6));
ObservableList<Data<Number, Number>> list = FXCollections.observableArrayList(update);
series.setData(list);
graph.getData().add(series);
stage.show();
}
}
关于javafx-2 - 具有 65000 个数据点的 JavaFX LineChart 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28850211/
我正在尝试使用立方图制作 LineChart。结果如下面的截图所示:三次贝塞尔曲线显示错误并有“尖峰”。有人可以帮我让它正确显示吗? 这是我的配置: LineDataSet lineD
Tag Library supports namespace: http://primefaces. org/ui,但没有为名称定义标签:lineChart
我想使用 primefaces 5.1 创建折线图。但在加载我的 xhtml 页面时,我收到错误消息“ Tag Library supports namespace: http://primeface
默认情况下,在 chart.js 中显示折线图时.工具提示显示存在的所有数据集的值。 当我们将鼠标悬停在该数据集点而不是所有数据集点上时,如何仅显示一个数据集点的值 最佳答案 nearest工具提示选
这个图表显示了问题: 我有计算数据和绘制图表的 JavaFX 程序,但为什么点连接不正确?我尝试了很多东西,甚至创建了两个单独的系列,但它不起作用。 public void createScatter
我知道在 Using Google Visualization API, how to turn off tooltips for a single column? 之前已经问过这个问题,但我没有得到
我想更新 LineChart 图例的样式,我在具有相应系列类的节点上使用 setStyle。 String color = .... XYChart.Series series = new XYCha
这是界面代码: @Override public void start(Stage primaryStage){ NumberAxis xAxis = new NumberAxis();
这个问题已经有答案了: JavaFX BarChart, Set Series Color by Series Name (1 个回答) 已关闭 5 年前。 此帖子已于 7 个月前编辑并提交审核,但未
我在从折线图中删除数据时遇到问题。我写了一个绘制图表的程序,点击按钮后的 Action 完成图表数据。 dataSeries1.getData().removeAll(); () {
我有这个代码: @Override public void start(Stage primaryStage){ NumberAxis xAxis = new NumberAxis();
刚刚遇到了 javafx.scene.chart.LineChart 的问题。当使用高于 5E13 的 Double 值填充图表数据时,该系列恰好消失(参见屏幕截图)。 之前 之后 以防万一:我使用以
我正在尝试将 javaFX LineChart 保存为 PNG,我希望背景是透明的。如果我这样做: SnapshotParameters spa = new SnapshotParameters();
我正在尝试使用 JavaFX 中的 LineChart 向用户显示数据。我有一个 Float 数组(不是原语,是对象,如 Float[] 中所示),可以随时添加,长度可以在 512 到 4096 点之
我正在尝试在 JavaFX 中创建折线图。此折线图应该有一个轴 (y) 与数字和另一个轴 (x) 与日期。日期范围应该由用户使用两个日期选择器来选择。现在这是我的问题:折线图只有类别和数字轴。有什么方
我正在使用这个图表库 https://github.com/danielgindi/Charts在我的申请中。我从中实现了折线图,图例相互重叠。我不确定这里出了什么问题,我确实玩过很多传奇的不同属性,
我正在使用 javascript 在我的 Web 应用程序中显示 Google Visulization LineChart。我怎样才能让它显示垂直网格线?我已经阅读了有关使用 chg 设置它们的信息
我想使用 Recharts 的 LineChart 来显示最多 200 个点的数据集。但是,我只想在小屏幕上显示其中 5 个数据点的点/工具提示/activeDot,因为在智能手机上不再可点击 200
我想在 LineChart 中设置一些值,但出现错误:添加了重复系列,或 NPE(我尝试清除我的系列列表,调用retainAll,但没有任何结果有帮助)在我的 Controller 类中,我存储了我的
我有一个关于图表 LineChart JavaFX 的好奇问题。 我有这个图表: 在 X 轴上形成“跳跃”的点(如我得分的两个红点所示),因此 JavaFX 在这两点之间画了一条线。如何删除每个“跳转
在这个演示中 http://nvd3.org/livecode/index.html#codemirrorNav只需将数据更改为 function() { return [ {
我是一名优秀的程序员,十分优秀!