Инструмент для автоматического создания диаграмм из файлов CSV (в ANT) - PullRequest
2 голосов
/ 15 сентября 2011

В настоящее время я тестирую программное обеспечение, которое записывает пару файлов CSV. Сейчас я ищу бесплатный инструмент для автоматического создания диаграмм (изображений) из этих файлов. Я работаю с Eclipse, и я работаю с ANT, чтобы построить свой проект. Так что инструмент (возможно, на Java) для его использования с ANT был бы великолепен.

В настоящее время я должен сделать много шагов вручную:

  • перейти в папку с файлами
  • открыть и редактировать файлы (заменить. На, в числах)
  • открыть файл в открытом офисе
  • создать диаграмму
  • экспортировать

Кто-нибудь знает, как автоматизировать этот процесс (даже некоторые его этапы)?

Ответы [ 3 ]

5 голосов
/ 16 сентября 2011

Опция 1

Очень полезная программа для генерации графиков на Unix: gnuplot .

Я также нашел скрипт csv2gnuplot , который вы могли быиспользовать в сценарии оболочки для пакетной обработки файлов.

Вариант 2

Если вы состоите в браке с решением ANT / Java (возможно, вы используете Windows), тогда я адаптировал следующий пример с использованием jfreechart

src / sample.csv

Max Pause Goal,Minor Collections,Major Collections,Pause Count,Max Pause,GC Time,Total Time, Throughput
0,49,0,49,0.005,0.081,1.831,95.599
100,49,0,49,0.005,0.077,1.828,95.785
200,49,0,49,0.005,0.081,1.829,95.550
300,47,0,47,0.009,0.089,1.837,95.145
400,48,0,48,0.005,0.081,1.835,95.598
500,48,0,48,0.005,0.078,1.825,95.729
600,49,0,49,0.005,0.081,1.830,95.600
700,48,0,48,0.005,0.081,1.828,95.564
800,44,0,44,0.017,0.094,1.857,94.919
900,49,0,49,0.006,0.082,1.833,95.533
1000,49,0,49,0.005,0.088,1.840,95.224

build.xml

<project name="demo" default="chart" xmlns:ivy="antlib:org.apache.ivy.ant">

    <property name="build.dir"   location="build"/>
    <property name="input.file"  location="src/sample.csv"/>
    <property name="output.file" location="${build.dir}/sample.png"/>

    <target name="init">
        <ivy:resolve/>
        <ivy:cachepath pathid="build.path" conf="build"/>

        <mkdir dir="${build.dir}"/>
    </target>

    <target name="chart" depends="init">
        <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

        <groovy>
        import java.io.*;
        import java.util.StringTokenizer;

        import org.jfree.chart.*;
        import org.jfree.chart.plot.*;
        import org.jfree.data.xy.*;

        boolean SHOW_LEGEND = false;
        boolean SHOW_TOOLTIPS = false;
        boolean GENERATE_URLS = false;

        FileReader fr = new FileReader(properties["input.file"]);
        BufferedReader br = new BufferedReader(fr);

        // Get the x-axis label from the first token in the first line
        // and the y-axis label from the last token in the first line.
        String line = br.readLine();
        StringTokenizer st = new StringTokenizer(line, ",");
        String xLabel = st.nextToken();
        String yLabel = st.nextToken();
        while (st.hasMoreTokens()) yLabel = st.nextToken();

        String title = yLabel + " by " + xLabel;

        // Get the data to plot from the remaining lines.
        float minY = Float.MAX_VALUE;
        float maxY = -Float.MAX_VALUE;
        XYSeries series = new XYSeries("?");
        while (true) {
            line = br.readLine();
            if (line == null) break;
            st = new StringTokenizer(line, ",");

            // The first token is the x value.
            String xValue = st.nextToken();

            // The last token is the y value.
            String yValue = "";
            while (st.hasMoreTokens()) yValue = st.nextToken();

            float x = Float.parseFloat(xValue);
            float y = Float.parseFloat(yValue);
            series.add(x, y);

            minY = Math.min(y, minY);
            maxY = Math.max(y, maxY);
        }

        XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(series);

        JFreeChart chart = ChartFactory.createXYLineChart(
            title, xLabel, yLabel, dataset,
            PlotOrientation.VERTICAL,
            SHOW_LEGEND, SHOW_TOOLTIPS, GENERATE_URLS);

        XYPlot plot = chart.getXYPlot();
        plot.getRangeAxis().setRange(minY, maxY);

        int width = 500;
        int height = 300;
        ChartUtilities.saveChartAsPNG(new File(properties["output.file"]), chart, width, height);
        </groovy>
    </target>

    <target name="clean">
        <delete dir="${build.dir}"/>
    </target>

</project>

ivy.xml

Плагин ivy позволяет ANT общаться с репозиториями Maven.

<ivy-module version="2.0">
    <info organisation="org.myspotontheweb" module="demo"/>
    <configurations defaultconfmapping="build->default">
        <conf name="build" description="ANT tasks"/>
    </configurations>
    <dependencies>
        <dependency org="org.codehaus.groovy" name="groovy-all" rev="1.8.2"/>
        <dependency org="jfree" name="jfreechart" rev="1.0.13"/>
        <dependency org="jfree" name="jcommon" rev="1.0.15" force="true"/>
    </dependencies>
</ivy-module>

Примечание: В последней версии jfreechart нарушена зависимостьв версии 1.0.16 jcommon (отсутствует в Maven Central)

2 голосов
/ 26 мая 2013

Для этого можно использовать XChart , поскольку создание Chart s из CSV файлов является новой функцией, начиная с версии 2.2.0 .Код будет выглядеть примерно так:

// import chart from a folder containing CSV files
Chart chart = CSVImporter.getChartFromCSVDir("./path/to/dir/with/csv/files/", DataOrientation.Columns, 600, 600);

// Show it
new SwingWrapper(chart).displayChart();

// Save it
BitmapEncoder.savePNG(chart, "./Sample_Chart.png");
BitmapEncoder.savePNGWithDPI(chart, "./Sample_Chart_300_DPI.png", 300);

Данные в файлах CSV могут быть горизонтальными или вертикальными, и каждый файл CSV должен содержать данные для одной серии.

Вытакже можно сделать обратное и экспортировать данные Chart в файлы CSV:

CSVExporter.writeCSVColumns(chart.getSeriesMap().get(0), "./path/to/dir//");
1 голос
/ 15 сентября 2011

Вы можете использовать Open Office API , также есть несколько примеров для Java в вики

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...