Я создаю полярный сюжет (звездный сюжет) и хотел бы сделать это в JavaFX. Я видел несколько коммерческих компаний, у которых есть такая возможность, однако я хотел бы иметь собственную библиотеку, которую мы могли бы модифицировать позже по мере необходимости. Я исследовал документацию и библиотеки, чтобы найти способ создать полярный график. Мне не везет. Можете ли вы указать мне в правильном направлении, пожалуйста? Я посмотрел на CategoryAxis, NumberAxis, ValueAxis, ScatterChart, PieChart, LineChart безрезультатно. В основном я смотрю на круговую сетку, и у меня возникают проблемы, даже не с нанесенными на график данными. Я работал с Arc и Canvas, а также с Scenegraph с Arcs. Я бы очень хотел использовать функции диаграммы, такие как построение данных и связывание этих данных с таблицей на полярном графике. Моя первоначальная мысль заключалась в том, чтобы использовать диаграмму XY с радиусом в качестве одной оси и углами, под которыми будут находиться точки осей. Любая помощь будет принята с благодарностью.
полярный график с использованием диаграмм javafx
Ответы (2)
О встроенной реализации PolarChart в JavaFX
Я думаю, вам нужно будет создать подкласс Chart напрямую (для создания нового типа диаграммы — PolarChart) вместо использования XYдиаграмма.
Вы можете много позаимствовать из реализация XYChart (и, возможно, даже реализация круговой диаграммы при создании нового PolarChart. В JavaFX существует код Java для PolarCharts, который вы могли бы помочь, некоторые из них (хотя они используют другую структуру и технологию рендеринга) могут вдохновить вас при создании PolarChart, см., например: DefaultPolarItemRender.java и PolarPlot.java.
Я предполагаю, что реализация будет сложной и требует значительного объема работы.
Об использовании альтернативных технологий
В качестве альтернативы вы можете использовать Java 8 и встроить полярный график JFreeChart в приложение JavaFX, используя SwingNode или используйте одну из множества отличных библиотек построения графиков на основе JavaScript (например, HighCharts), внедрив диаграмму, созданную с помощью JavaScript, в WebView.
SwingNode
, поскольку в JFreeChart встроен узел ChartViewer
на основе холста.
- person David Gilbert; 03.05.2016
Вместо того, чтобы переписывать логику полярных графиков в JavaFx, вы можете повторно использовать уже существующую библиотеку JavaScript. Я написал оболочку для использования известной библиотеки JavaScript d3.js из JavaFx:
https://github.com/stefaneidelloth/javafx-d3
Это позволяет вам использовать возможности d3 для создания красивой графики и графиков в JavaFx. Вот пример полярного графика d3.js:
http://bl.ocks.org/mbostock/4583749
var data = d3.range(0, 2 * Math.PI, .01).map(function(t) {
return [t, Math.sin(2 * t) * Math.cos(2 * t)];
});
var width = 960,
height = 500,
radius = Math.min(width, height) / 2 - 30;
var r = d3.scale.linear()
.domain([0, .5])
.range([0, radius]);
var line = d3.svg.line.radial()
.radius(function(d) { return r(d[1]); })
.angle(function(d) { return -d[0] + Math.PI / 2; });
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
var gr = svg.append("g")
.attr("class", "r axis")
.selectAll("g")
.data(r.ticks(5).slice(1))
.enter().append("g");
gr.append("circle")
.attr("r", r);
gr.append("text")
.attr("y", function(d) { return -r(d) - 4; })
.attr("transform", "rotate(15)")
.style("text-anchor", "middle")
.text(function(d) { return d; });
var ga = svg.append("g")
.attr("class", "a axis")
.selectAll("g")
.data(d3.range(0, 360, 30))
.enter().append("g")
.attr("transform", function(d) { return "rotate(" + -d + ")"; });
ga.append("line")
.attr("x2", radius);
ga.append("text")
.attr("x", radius + 6)
.attr("dy", ".35em")
.style("text-anchor", function(d) { return d < 270 && d > 90 ? "end" : null; })
.attr("transform", function(d) { return d < 270 && d > 90 ? "rotate(180 " + (radius + 6) + ",0)" : null; })
.text(function(d) { return d + "°"; });
svg.append("path")
.datum(data)
.attr("class", "line")
.attr("d", line);
Вы можете применить стратегию javafx-d3, чтобы включить любую библиотеку JavaScript, которую вы хотите. Следующая библиотека полярного блоттинга построена поверх d3.js и может предоставлять некоторые более специализированные функции:
https://github.com/biovisualize/micropolar