DateAxis domainAxis = new DateAxis("Date"); domainAxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE); NumberAxis rangeAxis = new NumberAxis("Y"); // Set a margin so that the label above the bar has a place to display rangeAxis.setUpperMargin(0.15); StackedXYBarRenderer renderer = new StackedXYBarRenderer(0.10); renderer.setDrawBarOutline(false); XYPlot plot = new XYPlot(dataset, domainAxis, rangeAxis, renderer); // Custom LabelGenerator, which displays the sum of the two series. XYItemLabelGenerator generator = new XYItemLabelGenerator() { @Override public String generateLabel(XYDataset dataset, int series, int item) { // Sum values for the two series of data double sum = dataset.getYValue(0, item) + dataset.getYValue(1, item); return "" + sum; } }; // The LabelGenerator is linked to series 1 (top part of the bar) renderer.setSeriesItemLabelGenerator(1, generator); renderer.setSeriesItemLabelsVisible(1, true); renderer.setSeriesPositiveItemLabelPosition(1, new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_CENTER)); renderer.setItemLabelAnchorOffset(10); JFreeChart chart = new JFreeChart("Stacked XY Bar Chart Demo 2", plot); return chart;
/** * Creates a new renderer. * * @param margin the percentual amount of the bars that are cut away. */ public StackedXYBarRenderer(double margin) { super(margin); this.renderAsPercentages = false; // set the default item label positions, which will only be used if // the user requests visible item labels... ItemLabelPosition p = new ItemLabelPosition(ItemLabelAnchor.CENTER, TextAnchor.CENTER); setBasePositiveItemLabelPosition(p); setBaseNegativeItemLabelPosition(p); setPositiveItemLabelPositionFallback(null); setNegativeItemLabelPositionFallback(null); }
/** * Sets the flag that controls whether the renderer displays each item * value as a percentage (so that the stacked bars add to 100%), and sends * a {@link RendererChangeEvent} to all registered listeners. * * @param asPercentages the flag. * * @see #getRenderAsPercentages() * * @since 1.0.5 */ public void setRenderAsPercentages(boolean asPercentages) { this.renderAsPercentages = asPercentages; fireChangeEvent(); }
GradientXYBarPainter xyBarpainter = new GradientXYBarPainter() { @Override public void paintBar(Graphics2D g2, XYBarRenderer renderer, int row, int column, RectangularShape bar, RectangleEdge base) { Rectangle2D rect = bar.getFrame(); rect.setRect(rect.getX(), rect.getY(), rect.getWidth() * widthMultiplier, rect.getHeight()); bar.setFrame(rect); super.paintBar(g2, renderer, row, column, bar, base); } }; StackedXYBarRenderer rend = new StackedXYBarRenderer(); rend.setBarPainter(xyBarpainter);
public JFreeChart createStackedBarChart(String title, XYDataset dataset) { DateAxis domainAxis = new DateAxis("Date"); domainAxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE); domainAxis.setLowerMargin(0.01); domainAxis.setUpperMargin(0.01); NumberAxis rangeAxis = new NumberAxis("Hours"); rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); rangeAxis.setUpperMargin(0.10); // leave some space for item labels StackedXYBarRenderer renderer = new StackedXYBarRenderer(0.15); // StackedXYAreaRenderer2 renderer = new StackedXYAreaRenderer2(); renderer.setDrawBarOutline(false); renderer.setBaseItemLabelsVisible(true); renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator()); renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER)); renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator("{0} : {1} = {2}", new SimpleDateFormat("yyyy"), new DecimalFormat("0"))); XYPlot plot = new XYPlot(dataset, domainAxis, rangeAxis, renderer); JFreeChart chart = new JFreeChart(title, plot); chart.removeLegend(); chart.setTextAntiAlias(RenderingHints.VALUE_TEXT_ANTIALIAS_DEFAULT); LegendTitle legend = new LegendTitle(plot); legend.setBackgroundPaint(Color.white); legend.setFrame(new BlockBorder()); legend.setPosition(RectangleEdge.BOTTOM); chart.addSubtitle(legend); return chart; }
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); rangeAxis.setUpperMargin(0.10); // leave some space for item labels StackedXYBarRenderer renderer = new StackedXYBarRenderer(0.15); renderer.setDrawBarOutline(true); renderer.setBaseItemLabelsVisible(true); renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator()); renderer.setSeriesPaint(0, new Color(0x660000)); renderer.setSeriesPaint(1, new Color(0x990000)); renderer.setSeriesPaint(2, new Color(0xFF0000)); renderer.setSeriesPaint(3, new Color(0x003300)); renderer.setSeriesPaint(4, new Color(0x006600)); renderer.setSeriesPaint(5, new Color(0x00FF00)); renderer.setSeriesPaint(6, new Color(0x003399)); renderer.setSeriesPaint(7, new Color(0x0066FF)); renderer.setSeriesPaint(8, new Color(0x00CCFF)); renderer.setSeriesPaint(9, new Color(0x330066)); renderer.setSeriesPaint(10, new Color(0x660066)); renderer.setSeriesPaint(11, new Color(0xCCCC33)); renderer.setSeriesPaint(12, new Color(0x990066)); renderer.setSeriesPaint(13, new Color(0xFF99FF)); renderer.setSeriesPaint(14, new Color(0xFF6633));
if (!getItemVisible(series, item)) { return; if (!Double.isNaN(v) && isSeriesVisible(i)) { if (this.renderAsPercentages) { v = v / total; - translatedStartX)); double translatedHeight = Math.abs(translatedValue - translatedBase); if (getMargin() > 0.0) { double cut = translatedWidth * getMargin(); translatedWidth = translatedWidth - cut; translatedStartX = translatedStartX + cut / 2; if (getShadowsVisible()) { getBarPainter().paintBarShadow(g2, this, series, item, bar, barBase, false); getBarPainter().paintBar(g2, this, series, item, bar, barBase); .getEntityCollection(); if (entities != null) { addEntity(entities, bar, dataset, series, item, bar.getCenterX(), bar.getCenterY()); if (isItemLabelVisible(series, item)) { XYItemLabelGenerator generator = getItemLabelGenerator(series, item); drawItemLabel(g2, dataset, series, item, plot, generator, bar,
- translatedStartX)); double translatedHeight = Math.abs(translatedValue - translatedBase); if (getMargin() > 0.0) { double cut = translatedWidth * getMargin(); translatedWidth = translatedWidth - cut; translatedStartX = translatedStartX + cut / 2; if (getShadowsVisible()) { getBarPainter().paintBarShadow(g2, this, series, item, bar, barBase, false); getBarPainter().paintBar(g2, this, series, item, bar, barBase); .getEntityCollection(); if (entities != null) { addEntity(entities, bar, dataset, series, item, bar.getCenterX(), bar.getCenterY()); if (isItemLabelVisible(series, item)) { XYItemLabelGenerator generator = getItemLabelGenerator(series, item); drawItemLabel(g2, dataset, series, item, plot, generator, bar, value < 0.0);
yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); StackedXYBarRenderer renderer = new StackedXYBarRenderer(); renderer.setBaseToolTipGenerator(new XYToolTipGenerator() { @Override public String generateToolTip(XYDataset dataset, int series, int item) {
dateaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE); NumberAxis numberaxis = new NumberAxis("Y"); StackedXYBarRenderer stackedxybarrenderer = new StackedXYBarRenderer(0.10000000000000001D); stackedxybarrenderer.setBaseItemLabelGenerator(new MyXYItemLabelGenerator()); stackedxybarrenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER)); stackedxybarrenderer.setBaseItemLabelsVisible(true); stackedxybarrenderer.setDrawBarOutline(false); XYPlot xyplot = new XYPlot(tablexydataset, dateaxis, numberaxis, stackedxybarrenderer); JFreeChart jfreechart = new JFreeChart("Stacked XY Bar Chart demo 2", xyplot);
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); rangeAxis.setUpperMargin(0.10); // leave some space for item labels StackedXYBarRenderer renderer = new StackedXYBarRenderer(0.15); renderer.setDrawBarOutline(true); renderer.setBaseItemLabelsVisible(true); renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator()); renderer.setSeriesPaint(0, new Color(47,133,18)); renderer.setSeriesPaint(1, new Color(151,195,30)); renderer.setSeriesPaint(2, new Color(253,249,50)); renderer.setSeriesPaint(3, new Color(253,191,35)); renderer.setSeriesPaint(4, new Color(253,123,26)); renderer.setSeriesPaint(5, new Color(216,106,20)); renderer.setSeriesPaint(6, new Color(181,97,28)); renderer.setSeriesPaint(7, new Color(208,56,20)); renderer.setSeriesPaint(8, new Color(253,30,19)); renderer.setSeriesPaint(9, new Color(120,54,210));
/** * Sets the flag that controls whether the renderer displays each item * value as a percentage (so that the stacked bars add to 100%), and sends * a {@link RendererChangeEvent} to all registered listeners. * * @param asPercentages the flag. * * @see #getRenderAsPercentages() * * @since 1.0.5 */ public void setRenderAsPercentages(boolean asPercentages) { this.renderAsPercentages = asPercentages; fireChangeEvent(); }