lobos82 Geschrieben 10. August 2006 Geschrieben 10. August 2006 Hi! Ich weiß nicht ob das hier hin passt, aber ich benutze den CeWolf in Verbindung mit Java. Kennt sich jemand damit aus? Ich habe ein Balkendiagramm und möchte gerne dynamisch Farben für die einzelnen Abschnitte vergeben, deren Werte sich wiederholen können und somit dann auch die gleiche Farbe haben sollen. Ist das irgendwie möglich? Gruß Zitieren
ksg9-sebastian Geschrieben 11. August 2006 Geschrieben 11. August 2006 Schau dir den Code an...du musst den CustomRenderer verwenden. Grafisch sieht das Diagramm so aus: - Balkendiagramm - Y-Achse: Anzahl der Stimmen - X-Achse: Antwort also : 100 . . 60 . . 20 0 # ja nein vielleicht Jeder Balken hat ne andere Farbe. Welche kannst du bestimmen. Ist im Code ersichtlich. CeWolf erzeugt ja auch ne Instanz von nem JFreeChart, von demher funktioniert das damit auch. private JFreeChart createChart(final CategoryDataset dataset, String title, String antworten) { final JFreeChart chart = ChartFactory.createBarChart(title, // chart // title antworten, // domain axis label "Stimmen", // range axis label dataset, // data PlotOrientation.VERTICAL, // the plot orientation false, // include legend true, false); chart.setBackgroundPaint(Color.lightGray); // get a reference to the plot for further customisation... final CategoryPlot plot = chart.getCategoryPlot(); plot.setNoDataMessage("NO DATA!"); final CategoryItemRenderer renderer = new CustomRenderer(new Paint[] { Color.red, Color.blue, Color.green, Color.yellow, Color.orange, Color.cyan, Color.magenta, Color.blue }); // renderer.setLabelGenerator(new StandardCategoryLabelGenerator()); renderer.setItemLabelsVisible(true); final ItemLabelPosition p = new ItemLabelPosition( ItemLabelAnchor.CENTER, TextAnchor.CENTER, TextAnchor.CENTER, 45.0); renderer.setPositiveItemLabelPosition(p); plot.setRenderer(renderer); // change the margin at the top of the range axis... final ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); rangeAxis.setLowerMargin(0.15); rangeAxis.setUpperMargin(0.15); CategoryAxis caxis = plot.getDomainAxis(); Font font = caxis.getLabelFont(); caxis.setLabelFont(new Font(font.getName(), font.getStyle(), 20)); return chart; } private CategoryDataset createDataset(String[] cats, int[] data) { final int[][] data2 = new int[][] { data }; return createCategoryDataset("Series ", cats, data2); } public static CategoryDataset createCategoryDataset(String rowKeyPrefix, String[] columnPrefixes, int[][] data) { DefaultCategoryDataset result = new DefaultCategoryDataset(); for (int r = 0; r < data.length; r++) { String rowKey = rowKeyPrefix + (r + 1); for (int c = 0; c < data[r].length; c++) { result.addValue(new Double(data[r][c]), rowKey, columnPrefixes[c]); } } return result; } } class CustomRenderer extends BarRenderer { /** The colors. */ private Paint[] colors; /** * Creates a new renderer. * * @param colors * the colors. */ public CustomRenderer(final Paint[] colors) { this.colors = colors; } /** * Returns the paint for an item. Overrides the default behaviour inherited * from AbstractSeriesRenderer. * * @param row * the series. * @param column * the category. * * @return The item color. */ public Paint getItemPaint(final int row, final int column) { return this.colors[column % this.colors.length]; } } Zitieren
lobos82 Geschrieben 5. Oktober 2006 Autor Geschrieben 5. Oktober 2006 Ich habe erneut ein Problem mit dem Cewolf. Ich möchte in einem Balken einer Einheit "1" eine feste breite zuordnen. Geht das? Zur erklärung ich kann mir die Anzeige für einen Tag, 7 Tage oder 28 Tage ausgeben lassen, dabei dehnen sich die Balken immer über das komplette Chart aus. Ich möchte jetzt, dass ein Tag immer gleich breit ist. Also, dass das Diagramm für einen Tag nicht so breit ist wie das für 7 oder 28 Tage. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.