# JFreeChart Größe anpassen



## FabianLurz (7. Dez 2011)

Hallo Leute,
habe mal wieder ein kleines Problem. Ich arbeite momentan viel mit JFreeChart um Statistiken auszuwerten. Funktioniert alles auch eigentlich super....jedoch möchte ich die Größe des Plots verändern.
Also generell geht es erstmal um eine BarChart. Nun ist es so, dass der Text der an den Achsen steht ziemlich lange ist. Dieser wird dann am Schluss nur noch mit "....." dargestellt. Ich möchte aber wie gesagt lieber den Plot verkleinern, damit die Beschriftung in ihrer ganzen Pracht dort steht 
Hoffe ihr könnt mir helfen....habe wirklich schon viel gesucht aber nicht das passenden gefunden (nur wie man die Range verändert aber das bringt mir leider nicht viel).
Ich hoffe die Jungs von Jfreechart haben daran gedacht und soetwas gibt es überhaupt.
Grüße Fabian


----------



## SlaterB (7. Dez 2011)

hast du ein Beispielprogramm dafür, welches man anschauen und ändern kann?
... kenne ich nur bei der Domain-Achse unten, da hilft entweder, den Plot zu verbreitern oder den Text senkrecht zu setzen,

wie Plot verkleinern irgendwo helfen kann, kann ich mir gar nicht vorstellen


----------



## FabianLurz (7. Dez 2011)

```
private JFreeChart createChart(final CategoryDataset dataset) {

        // create the chart...
        final JFreeChart chart = ChartFactory.createBarChart3D(
                "Top Artikel", // chart title
                "", // domain axis label
                "", // range axis label
                dataset, // data
                PlotOrientation.HORIZONTAL, // orientation
                true, // include legend
                false, // tooltips?
                false // URLs?
                );


        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...

        // set the background color for the chart...
        chart.setBackgroundPaint(Color.white);

        // get a reference to the plot for further customisation...
        final CategoryPlot plot = chart.getCategoryPlot();
        plot.setBackgroundPaint(Color.white);
        plot.setDomainGridlinePaint(Color.white);
        plot.setRangeGridlinePaint(Color.white);
        plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);
        plot.setDomainGridlinesVisible(false);
        plot.setRangeGridlinesVisible(true);
        plot.setRangeGridlinePaint(Color.black);
        plot.setDomainGridlinePaint(Color.black);
        plot.configureDomainAxes();
        plot.configureRangeAxes();
        
        

        

        // set the range axis to display integers only...
        final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        rangeAxis.setTickLabelFont(new Font("Arial", Font.PLAIN, 10));
        
        
        // disable bar outlines...
        final BarRenderer renderer = (BarRenderer) plot.getRenderer();
        renderer.setDrawBarOutline(false);

        // set up gradient paints for series...
        final GradientPaint gp0 = new GradientPaint(
                0.0f, 0.0f, Color.red,
                0.0f, 0.0f, Color.lightGray);
        final GradientPaint gp1 = new GradientPaint(
                0.0f, 0.0f, Color.red,
                0.0f, 0.0f, Color.lightGray);

        final GradientPaint gp2 = new GradientPaint(
                0.0f, 0.0f, Color.green,
                0.0f, 0.0f, Color.lightGray);
        renderer.setSeriesPaint(0, gp0);
        renderer.setSeriesPaint(1, gp1);
        renderer.setSeriesPaint(2, gp2);

        CategoryAxis cA = plot.getDomainAxis();
        cA.setTickLabelFont(new Font("Arial", Font.PLAIN, 10));
       
        // OPTIONAL CUSTOMISATION COMPLETED.

        return chart;

    }
```
Also das wäre der Abschnitt um den es ginge.
Gruß Fabian


----------



## SlaterB (7. Dez 2011)

eine GUI drumherum zur Anzeige kann ich ja notfalls noch ergänzen, obwohl vielleicht Größenangaben hier ziemlich wichtig wären,
aber fehlt nicht vorallem noch Daten die angezeigt werden sollen (dataset) oder Achsenbeschriftungen oder was immer das Problem ist?

stelle einfach ein Dummy-Programm mit main-Methode zusammen, kopieren, run, Problem sichtbar?

wenn möglich, dann nimm die Standard-Beispiele als Grundlage
ChartJava

edit: 
ist es ein Bild wie
JFreeChart: Horizontal Bar Chart 3D Demo 2 : Bar Chart 3D HorizontalChartJava
? dann würde ich zumindest schon verstehen worum es ungefähr geht..


----------



## FabianLurz (7. Dez 2011)

Achso ja...ja gut wollte jetzt nicht zu viel Code reinstellen. Hier noch das Dataset. Das Programm wird dann über eine andere Klasse aufgerufen (Denke das ist unwichtig )

```
private CategoryDataset createDataset() {

        // row keys...
        final String series1 = "Bruttoumsatz";
        // create the dataset...
        final DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        String[] Artikelbezeichung;
        String[] VMenge;
        String[] Preis;

        Artikelbezeichung = titel.split(";");
        VMenge = verkauft.split(";");
        Preis = preis.split(";");
        
        //Strings sortieren
        StringSort[] demo = new StringSort[Artikelbezeichung.length];
        for (int a = 0; a < Artikelbezeichung.length; a++) {
            demo[a] = new StringSort(Artikelbezeichung[a]+"  "+VMenge[a]+"  "+Preis[a], Integer.parseInt(VMenge[a]) * Double.parseDouble(Preis[a].replaceAll("€", "")));
        }
        Arrays.sort(demo, new Comparator<StringSort>() {

            @Override
            public int compare(StringSort p1, StringSort p2) {
                return p1.getPrice() < p2.getPrice() ? 1 : -1;
            }
        });
      
        //Datensatz füllen
        int i=0;
          for (StringSort p : demo) {
            if (p.getPrice() != 0) {
                dataset.addValue(p.getPrice(), series1, p.getDesignation());                
            }
            i++;
        }
        return dataset;

    }
```
Gruß Fabian und danke schonmal


----------



## SlaterB (7. Dez 2011)

siehe meine edits in der letzten Antwort und dein neuer Code ist in gewisser Hinsicht genausowenig hilfreich wie der vorherige,
er enthält keinerlei Daten, was nützt mir Artikelbezeichung[a]?
es geht darum eine Chart real zusammenzubauen, dafür sind reale Werte wie Category "Suppengemüse" nötig

zum nun schon dritten Mal: du musst ein Dummy-Programm zusammenstellen mit einem ganz einfachen DataSet, 
"Suppengemüse"=2.3, "Tortenguss"=4.5 usw.


----------



## FabianLurz (7. Dez 2011)

Ja sry hab das gerade erst noch gesehen. Also und zwar ist es so....du hast ja in dem Bild dass du jetzt gemacht hast Istanbul etc.....also die Ländernamen stehen. Stell dir jetzt vor dass die noch viel länger sind....dann wird das wohl so angezeigt "Istanbul ist ein......" und ich will nicht die Punkte sondern es soll ausgeschrieben sein. Also muss es entweder die Möglichkeit geben den Plot zu verkleinern oder den Bereich für die Schrift vergrößern.
Ein Dummyprogramm zum vorstellen hast du ja schon eingestellt Also es ist eine BarChart wie in dem Bild....das orginal darf ich aus bestimmten Gründen nicht zeigen sry.
Gruß Fabian


----------



## SlaterB (7. Dez 2011)

gut, nun ist also ein Testprogramm gefunden, dein Originial wäre auch gar nicht interessant bzw. müsste quasi auf denselben Stand zusammengekürzt werden,

nun muss nur noch eine Lösung her, der gefährlichere Teil, mit Pech stehe ich jetzt ohne Tipp da 

irgendwie glaube ich dass ich eher durch zufälliges Durchschauen der Methoden was gefunden habe,
ein ...-Text wurde dann komplett dargestellt:
> axis.setMaximumCategoryLabelWidthRatio(1);
bezogen auf die DomainAxis dort,  cA wahrscheinlich in deinem Code


----------



## FabianLurz (7. Dez 2011)

PERFEKT!!! Ich wusste es ist nur ein kleiner Befehl. hat geklappt Danke


----------

