Java - Язык:Действительно простая утилита для построения точечных графиков
-
13-09-2019 - |
Вопрос
Я знаю, что существует множество сравнений библиотек построения графиков Java, но я не нахожу то, что мне нужно.Мне просто нужен ошеломляюще простой инструментарий, который создает изображения диаграмм рассеяния из набора координат.Никакого графического интерфейса, никакого взаимодействия, никакого навороченного дисплея, просто базовая система координат XY с точками.
Это не было бы концом света, если бы использовать что-то, что предлагает гораздо больше функциональности, чем мне нужно, но я бы предпочел этого не делать.Знаете ли вы что-нибудь похожее на то, что я ищу?
Решение
Вы смотрели на JFreeChart (Бесплатная карта)?Хотя он может делать некоторые очень сложные вещи, он также делает и простые.Ниже показан скриншот его возможности построения точечной диаграммы.
(источник: jfree.org)
Другие советы
Я посмотрел на то, что существует, и понял, что jcckit технически довольно хорош, но просто не хватает простой оболочки вокруг него, чтобы сделать его простым в использовании.
Поэтому я раздвоил его и сделал действительно простую обертку.Вот как использовать:
import static easyjcckit.QuickPlot.*;
double[] xaxis = new double[]{0,1,2,3,4,5};
double[] yvalues = new double[]{0,1,4,9,16,25};
scatter( xaxis, yvalues ); // create a plot using xaxis and yvalues
double[] yvalues2 = new double[]{0,1,2,3,4,5};
addScatter( xaxis, yvalues2 ); // create a second plot on top of first
System.out.println("Press enter to exit");
System.in.read();
Помимо точечных графиков, вы можете свободно добавлять линии к одним и тем же осям, если хотите, используя "addPlot" и "plot".
Вот этот код: https://bitbucket.org/hughperkins/easyjcckit
Вы используете пользовательскую JPanel для отображения ваших данных (не тестировалось, но вы поняли идею ...)
private List<Point2D> data=(...);
JPanel pane=new JPanel()
{
protected paintComponent(Graphics2D g)
{
super.paintComponent(g);
int minx=(...),miny=(...),maxx=(...),maxy=(...);
for(Point2D p: data)
{
int x=((p.getX()-minx)/(maxx-minx))*this.getWidth();
int y=((p.getY()-miny)/(maxy-miny))*this.getHeight();
g.drawLine(x-5,y,x+5,y);
g.drawLine(x,y-5,x,y+5);
}
}
pane.setOpaque(true);
(...)
anotherComponent.add(pane);
(...)
}
Также вы могли бы проверить Простой Java-график.Минимальный пример (без вариантов):
Plot plot = Plot.plot(null).
// setting data
series(null, Plot.data().
xy(1, 2).
xy(3, 4), null);
// saving sample_minimal.png
plot.save("sample_minimal", "png");