JFreechart - полярный график с цветовой картой - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь получить эквивалент Matlab Pcolor, добавленного в функцию polar (), но в Java.

Я довольно новичок в языке, но мне уже удалось получить полярный график, сследующий код:

public class Polar extends JFrame {

 public Polar(double[][] vec){

  XYDataset dataset = getXYDataset(vec);
  JFreeChart chart = ChartFactory.createPolarChart("test", dataset, true, true, true);
  PolarPlot plot = (PolarPlot) chart.getPlot();
  DefaultPolarItemRenderer render = (DefaultPolarItemRenderer)
  plot.getRenderer();
  render.setFillComposite(...);
  render.setSeriesFilled(0,true);
  ChartPanel panel = new ChartPanel(chart);
  panel.setMouseZoomable(false);
  setContentPane(panel);

 }

 private XYDataset getXYDataset(double[][] vec){
  XYSeriesCollection dataset = new XYSeriesCollection();
  XYSeries faultDP =new XYSeries("Serie1");
  for(int i = 0; i<vec.length; i++){
   faultDP.add(vec[i][1],vec[i][0]);
  }
  dataset.addSeries(faultDP);
  return dataset;
 }
}

Массив vec содержит скорость и угол моей переменной и должен быть нанесен на полярный график.это отлично работает

Следующим шагом будет передача новой переменной, двойного вектора [] [] измерения 90x360.Каждая ячейка должна быть нанесена на полярный график со значением цвета фона, как на рисунке ниже.

Example of colormap

Есть идеи, как это сделать?

Приветствия, Фло

1 Ответ

0 голосов
/ 05 декабря 2018

Итак, я посмотрел на то, что trashgod предложил мне и пришел с этим кодом:

public class PolarTest extends JFrame {

public PolarTest(double[][] dipaz, double[][] val){

JFrame f = new JFrame("Title");
ChartPanel panel = new ChartPanel(createChart(val, dipaz));
panel.setPreferredSize(new Dimension(500,500));
f.add(panel);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);


}

private JFreeChart createChart(double[][] val,double[][] dipaz){
    XYSeriesCollection dataset = new XYSeriesCollection ();
    double step, min, max;
    min  = val[0][2];
    max = val[val.length-1][2];
    step = (max-min)/10; //creation of 10 areas of similar heat range
    dataset = (XYSeriesCollection) createDataset(val,step);

    JFreeChart chart = ChartFactory.createPolarChart("test", dataset, true, true, true);
    PolarPlot plot = (PolarPlot) chart.getPlot();
    DefaultPolarItemRenderer r = (DefaultPolarItemRenderer) plot.getRenderer();
    r.setFillComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,0.5f));

    for(int i =0; i<dataset.getSeriesCount(); i++){
        r.setSeriesFilled(i, true);
        r.setShapesVisible(false);
        r.setDrawOutlineWhenFilled(false);
    }

    NumberAxis rangeAxis = (NumberAxis) plot.getAxis();
    rangeAxis.setTickLabelsVisible(false);
    return chart;
}  

private XYDataset createDataset(double[][] val, double step){
 XYSeriesCollection result = new XYSeriesCollection();
 double dpTmp, breakPoint;
 int cpt=1;
 boolean t;

 t= true;

 dpTmp = val[0][2];
 breakPoint = dpTmp + step;
 XYSeries series = null ;

 for(int i = 0; i< val.length; i++){
    if(val[i][2] < breakPoint){
        if(t){
         series = new XYSeries(String.valueOf(cpt));
         t = false;
        }
       series.add(val[i][1],val[i][0]);
       cpt++;
    }else{
       result.addSeries(series);
       i--;
       t=true;
       breakPoint = val[i][2] + step;
    }
 }
 return result;
}

Массив dipaz содержит мой угол и наклон (из X, Y точек, которые я хотел быпозже нанесите на диаграмму полярное представление), в то время как val a 3 by N array: val[][0] = dip val[][1] = angle val[][2] = значение "heat", если мы рассматриваем эту проблему как тепловую карту.

val по возрастанию отсортировано по третьему столбцу.Моя идея состояла в том, чтобы разбить весь массив на 10 (или более) областей с одинаковыми значениями тепловыделения.

Если я запускаю этот код, я получаю следующий вывод (см. Рис.).Мы можем видеть, что это там, но не совсем.Я не уверен, что этот код может правильно отобразить мою высокую температуру на полярном графике>

enter image description here

Как я могу приблизиться к фотографии, которую я опубликовалв моем первом посте?

Спасибо за помощь.Flo

...