полярен график с помощта на javafx диаграми

Създавам полярен график (звезден график) и бих искал да го направя в JavaFX. Виждал съм няколко търговски компании, които имат тази възможност, но бих искал да имам собствена библиотека, която можем да модифицираме по-късно, ако е необходимо. Проучих документацията и библиотеките, за да намеря начин да създам полярен график. Нямам късмет. Можете ли да ме насочите в правилната посока, моля? Разгледах CategoryAxis, NumberAxis, ValueAxis, ScatterChart, PieChart, LineChart без резултат. Гледам основно кръглата решетка и с нея имам проблеми, дори не начертаните данни. Работил съм с Arc и Canvas, заедно със Scenegraph with Arcs. Наистина бих искал да използвам функциите на диаграмата, като начертаване на данни и свързване на тези данни с таблица на полярен график. Първоначалната ми мисъл беше да използвам XY диаграмата с радиуса като една ос и ъглите, под които ще бъдат точките на оста. Всяка помощ ще бъде високо оценена.


person user2886917    schedule 16.10.2013    source източник
comment
Друг въпрос, трябва ли да използвам платно, за да начертая полярната графика или да използвам възли, ако не използвам възможността за диаграми в javafx? Това е мислещ клиент.   -  person user2886917    schedule 24.04.2014


Отговори (2)


Относно внедряването на PolarChart в JavaFX

Мисля, че ще трябва директно да подкласирате Chart (за да създадете нов тип диаграма - PolarChart), вместо да използвате XYChart.

Можете да заимствате много от Имплементация на XYChart (и вероятно дори Имплементация на PieChart, когато създавате новата си PolarChart. Има съществуващ Java код за PolarCharts в JavaFX, който бихте могли да помогнете, което (въпреки че използва различна рамка и технология за изобразяване) някои от тях може да дадат малко вдъхновение при създаването на вашата PolarChart, вижте например: DefaultPolarItemRender.java и PolarPlot.java.

Предполагам, че внедряването ще бъде предизвикателство и значително количество работа.

Относно използването на алтернативна технология

Като алтернатива можете да използвате Java 8 и да вградите полярен график на JFreeChart в приложение на JavaFX, като използвате SwingNode или използвайте една от многото отлични базирани на JavaScript библиотеки за чертане (като HighCharts), чрез вграждане на изобразената от JavaScript диаграма в WebView.

person jewelsea    schedule 16.10.2013
comment
Какъв съществуващ Java код има в PolarCharts на JavaFX? Мисля, че пропуснах това, когато проучвах. Разгледах JFreeChart и някои други, но тъй като засега трябва да остана на Java 7, не мога да включа swing в приложението. - person user2886917; 17.04.2014
comment
Понастоящем няма съществуващ код за полярни диаграми в JavaFX. Ако искате да използвате JavaFX за начертаване на такава диаграма, ще трябва да извлечете от Chart и сами да напишете кода. - person jewelsea; 02.05.2014
comment
За всеки, който иска да използва JFreeChart в JavaFX, не е необходимо да използва SwingNode, тъй като има базиран на платно ChartViewer възел, вграден в JFreeChart. - person David Gilbert; 03.05.2016
comment
Въпреки че JFreeChart има ChartViewer JavaFX като заместител на ChartPanel Swing, изглежда не поддържа CSS стил на PolarPlot. Както класът JFreeChart, така и класът PolarPlot все още използват някакъв Java Swing/AWT код. - person DJViking; 10.02.2017

Вместо да пренаписвате логиката на полярните диаграми в 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 библиотека, която желаете. Следната библиотека на polar blot е изградена върху d3.js и може да предостави някои по-специализирани функции:

https://github.com/biovisualize/micropolar

person Stefan    schedule 01.05.2016