jfreeChart

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo nochmal,


ich hätte noch eine Frage zum Renderer von jFreeChart und zwar möchte ich die Farben der einzelnen Linien bestimmen und wenn ich mit der Maus über eine Linie drüberfahre, dann soll die Linie dicker (hervorgehoben) erscheinen.

Momentan verwende ich diesen Renderer, weiß aber nicht, wie meine Schierigkeiten mir diesem Renderer gelöst werden können:
XYLineAndShapeRenderer

die API befindet sich hier:

http://www.jfree.org/jfreechart/api.html


lg
 

DaKo

Bekanntes Mitglied
Ich habe bisher nur mit TimeSeriesCharts gearbeitet. Daher weiß ich nicht, ob es für dich übertragbar ist, aber trotzdem ;)

Farben setzen:

Code:
private final Color[] colors = ....;
JFreeChart chart = ChartFactory.createTimeSeriesChart(<Titel>,<xLabel>, <yLabel>,<dataSet>,
                                                                             true,  //Legende?
                                                                             true,  //Tooltips?
                                                                             false);//URLs?

XYPlot plot = chart.getXYPlot();

XYItemRenderer renderer = plot.getRenderer();

for (int i=0;i<dataSet.getSeriesCount();i++)
	renderer.setSeriesPaint(dataSet.getSeries(i), colors[i%colors.length]);

wegen dem mouseOver-Effekt, schau ich gleich mal ;)
 

André Uhres

Top Contributor
Ich hab vor langer Zeit mal damit gearbeitet, da hab ich sowas gemacht:
Code:
       JFreeChart chart=null ;
...
        // NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
        CategoryPlot plot = chart.getCategoryPlot();
        plot.setDrawingSupplier(getSupplier());
        // customise the renderer...
        LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
        renderer.setDrawShapes(true);
...
    public DefaultDrawingSupplier getSupplier(){
        return new DefaultDrawingSupplier(
                new Paint[] {
            blueX,
            Color.green,
            Color.red,
            Color.orange,
            Color.magenta,
            Color.cyan,
            Color.pink,
            Color.gray,
            Color.yellow,
            ChartColor.DARK_RED,
            ChartColor.DARK_GREEN,
            ChartColor.LIGHT_RED,
            ChartColor.DARK_YELLOW,
            ChartColor.DARK_MAGENTA,
            ChartColor.DARK_CYAN,
            Color.lightGray,
            ChartColor.LIGHT_RED,
            ChartColor.LIGHT_BLUE,
            ChartColor.LIGHT_GREEN,
            ChartColor.LIGHT_YELLOW,
            ChartColor.LIGHT_MAGENTA,
            ChartColor.LIGHT_CYAN},
                DefaultDrawingSupplier.DEFAULT_OUTLINE_PAINT_SEQUENCE,
                DefaultDrawingSupplier.DEFAULT_STROKE_SEQUENCE,
                DefaultDrawingSupplier.DEFAULT_OUTLINE_STROKE_SEQUENCE,
                DefaultDrawingSupplier.DEFAULT_SHAPE_SEQUENCE
                );
    }
 

PollerJava

Top Contributor
Hallo,

(PS: der Code unten ist ein vollständiges, funktionsfähiges Beispiel)

vielen Dank für die Antworten,
hab jetzt noch ein großes Problem und zwar wenn ich auf einen Button drücke, dann soll eine Linie gezeichnet werden,
Das Problem beim unteren Code ist, dass die "datasets" erzeugt werden und dann diese auf das Panel "ChartPanel" gegeben werden, ich möchte aber, wenn das "ChartPanel" schon besteht und angezeigt wird, dass ich dann eine Linie draufbekomme.

Ich weiß jetzt nicht genau ob es da irgendwelche Listener gibt oder ob ich das "ChartPanel" neu erzeugen muss?

Vielleicht kann mir da jemand weiterhelfen.

lg





Code:
package demo;
import java.awt.Color;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.RefineryUtilities;

public class LineChartDemo2 extends ApplicationFrame {
/**
* Creates a new demo.
*
* @param title the frame title.
*/
public LineChartDemo2(String title) {
super(title);
XYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
/**
* Creates a sample dataset.
*
* @return a sample dataset.
*/
private static XYDataset createDataset() {
XYSeries series1 = new XYSeries("First");
series1.add(1.0, 1.0);
series1.add(2.0, 4.0);
CHAPTER 7. LINE CHARTS 59
series1.add(3.0, 3.0);
series1.add(4.0, 5.0);
series1.add(5.0, 5.0);
series1.add(6.0, 7.0);
series1.add(7.0, 7.0);
series1.add(8.0, 8.0);
XYSeries series2 = new XYSeries("Second");
series2.add(1.0, 5.0);
series2.add(2.0, 7.0);
series2.add(3.0, 6.0);
series2.add(4.0, 8.0);
series2.add(5.0, 4.0);
series2.add(6.0, 4.0);
series2.add(7.0, 2.0);
series2.add(8.0, 1.0);
XYSeries series3 = new XYSeries("Third");
series3.add(3.0, 4.0);
series3.add(4.0, 3.0);
series3.add(5.0, 2.0);
series3.add(6.0, 3.0);
series3.add(7.0, 6.0);
series3.add(8.0, 3.0);
series3.add(9.0, 4.0);
series3.add(10.0, 3.0);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
dataset.addSeries(series2);
dataset.addSeries(series3);
return dataset;
}
/**
* Creates a chart.
*
* @param dataset the data for the chart.
*
* @return a chart.
*/
private static JFreeChart createChart(XYDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createXYLineChart(
"Line Chart Demo 2", // chart title
"X", // x axis label
"Y", // y axis label
dataset, // data
PlotOrientation.VERTICAL,
true, // include legend
true, // tooltips
false // urls
);
// NOW DO SOME OPTIONAL CUSTOMISATION OF THE CHART...
chart.setBackgroundPaint(Color.white);
// get a reference to the plot for further customisation...
XYPlot plot = (XYPlot) chart.getPlot();
plot.setBackgroundPaint(Color.lightGray);
plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
XYLineAndShapeRenderer renderer
= (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setShapesVisible(true);
renderer.setShapesFilled(true);
// change the auto tick unit selection to integer units only...
NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
// OPTIONAL CUSTOMISATION COMPLETED.
return chart;
}
/**
* Creates a panel for the demo (used by SuperDemo.java).
*
* @return A panel.
*/
public static JPanel createDemoPanel() {
JFreeChart chart = createChart(createDataset());
return new ChartPanel(chart);
}
/**
* Starting point for the demonstration application.
*
* @param args ignored.
*/
public static void main(String[] args) {
LineChartDemo2 demo = new LineChartDemo2("Line Chart Demo 2");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
 

André Uhres

Top Contributor
PollerJava hat gesagt.:
..ich möchte aber, wenn das "ChartPanel" schon besteht und angezeigt wird,
dass ich dann eine Linie draufbekomme..
Ich würde in die Logik, die den Chart erstellt, eine Abfrage machen,
ob die zusätzliche Linie gezeigt werden soll oder nicht,
und dann den Chart einfach neu erstellen, wenn die Option ändert.
 

PollerJava

Top Contributor
Hallo,

kannst Du mir da einen Ansatz geben wie ich die Logik machen könnte, stehe momentan ein bisschen an, mein Problem ist ja, dass, wenn ich einen Button drücke, die Daten aus einer DB hole (das funktioniert alles einwandfrei), dann muss ich eben einen neuen Datensatz (dataset) erstellen und diesen dann irgendwie auf das ChartPanel bekommen -> aber wie ich den neuen Datensatz auf das ChartPanel bekomme, da stehe ich momentan an.

vielen Dank für Deine/Eure Unterstützung!!

lg
 

PollerJava

Top Contributor
ja das habe ich versucht aber eswird nichts angezeit, ich muss dem ChartPanel noch sagen, dass es sich aktualisieren soll und das ist eben mein Problem, ich weiß nicht ob ich da gleich ein neues ChartPanel erzeugen soll oder wie ich das machen kann??

vielen Dank!!! für die Hilfe!!

lg
 

André Uhres

Top Contributor
PollerJava hat gesagt.:
..ich weiß nicht ob ich da gleich ein neues ChartPanel erzeugen soll ..
André Uhres hat gesagt.:
..Ich würde in die Logik, die den Chart erstellt, eine Abfrage machen,
ob die zusätzliche Linie gezeigt werden soll oder nicht,
und dann den Chart einfach neu erstellen, wenn die Option ändert.
Natürlich musst du ihn dann auch anzeigen :wink:
Eventuell ein validate, revalidate, repaint, updateUI, oder was auch immer machen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G jFreeChart Allgemeine Java-Themen 5
T Jfreechart continuous series mit fester Länge Allgemeine Java-Themen 23
H JFreechart createMultiplePieChart Allgemeine Java-Themen 2
M Suche Alternative zu JFreeChart Allgemeine Java-Themen 11
T jfreechart Linien/Punkttyp anpassen Allgemeine Java-Themen 1
S JFreechart: ValueMarker mit der Maus ziehen? Allgemeine Java-Themen 12
A JFreeChart funktioniert nicht :( Allgemeine Java-Themen 6
M Swing JFreechart x-Achse DateAxis, start im Ursprung Allgemeine Java-Themen 3
S Performante Visualisierung groẞer Datenmengen (ohne JFreeChart) Allgemeine Java-Themen 22
M Swing JFreeChart Domain Axis Label Abstand zu TickUnitLabel Allgemeine Java-Themen 9
S AWT JFreeChart in ein Label Allgemeine Java-Themen 7
J JFreeChart - Mehrere X-Achsen Einteilungen Allgemeine Java-Themen 3
T JFreeChart Diagramm speichern - Problem mit ImageIO nach Projektexport Allgemeine Java-Themen 3
B JFreeChart -> TimeSeries-Plot -> mehr y-Achsen Allgemeine Java-Themen 2
F JFreeChart Größe anpassen Allgemeine Java-Themen 8
K JFreeChart - Einträge in DomainAxis anpassen Allgemeine Java-Themen 2
I 2D-Grafik JFreeChart ChartPanel Problem mit dynamischer Grösse Allgemeine Java-Themen 3
O JFreeChart: ständiges Updaten der Chart stoppen Allgemeine Java-Themen 4
M Diagramm mit JfreeChart Allgemeine Java-Themen 8
M JFreeChart mehrere PieCharts erstellen Allgemeine Java-Themen 2
M JFreeChart piechart - labelAnzeige Allgemeine Java-Themen 2
ARadauer JFreeChart: Beschriftung anzeigen Allgemeine Java-Themen 6
B JFreeChart - Achsenbeschriftung Allgemeine Java-Themen 4
ff Labels mit JFreeChart ausrichten Allgemeine Java-Themen 2
K JFreeChart Achsenbeschriftung ändern? Allgemeine Java-Themen 4
C jFreechart Diagram erstellen Allgemeine Java-Themen 2
G JFreeChart Allgemeine Java-Themen 5
G Jfreechart zwei charts Allgemeine Java-Themen 2
S JFreeChart LineChart Punkte über NULL Werte hinweg verbinden Allgemeine Java-Themen 5
E JFreeChart jars mit in meine Jar packen Allgemeine Java-Themen 6
G jfreechart probleme mit dem package? Allgemeine Java-Themen 2
D JFreeChart und Kuchendiagramm Allgemeine Java-Themen 3
P JFreeChart Fehlermeldung Allgemeine Java-Themen 2
P jFreeChart, binäre Signale Allgemeine Java-Themen 2
P jfreeChart y- Achsen hinzufügen Allgemeine Java-Themen 2
MQue JFreeChart Allgemeine Java-Themen 3
K JFreeChart Allgemeine Java-Themen 3
K JFreeChart und itext: Bildprobleme Allgemeine Java-Themen 4
G java.lang.NullPointerException JFreeChart Allgemeine Java-Themen 5
M JFreeChart: Zuviele Balken, Übersicht leidet dehr darunter Allgemeine Java-Themen 6
G JFreeChart - Labels Allgemeine Java-Themen 2
G Suche Beispiele jFreeChart Allgemeine Java-Themen 12
G Daten aus MySQL-Datenbank an JFreeChart übergeben Allgemeine Java-Themen 3
G JFreeChart drucken Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben