2012-07-24 139 views
0

是否有可能在标签中显示酒吧总额。
我加入其中,它增加了一个标签,每个系列jfreechart - 将标签总数添加到堆叠酒吧

enter image description here

stackedxybarrenderer.setSeriesItemLabelGenerator(index, new MyItemLabelGenerator()); 

犯规相当做到这一点的例子。它绘制了系列中的标签(在小方块内)。 有什么建议吗?

我使用这个(从omnline例子)

private JFreeChart createChart(TableXYDataset tablexydataset) { 
    DateAxis dateaxis = new DateAxis("Date"); 
    dateaxis.setTickMarkPosition(DateTickMarkPosition.MIDDLE); 
    NumberAxis numberaxis = new NumberAxis("Y"); 
    StackedXYBarRenderer stackedxybarrenderer = new StackedXYBarRenderer(0.10000000000000001D); 

    stackedxybarrenderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator()); 
    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); 
    return jfreechart; 
} 

private TableXYDataset createDataset() { 
    TimeTableXYDataset timetablexydataset = new TimeTableXYDataset(); 
    Day day = new Day(1, 3, 2005); 
    Day day1 = new Day(2, 3, 2005); 
    Day day2 = new Day(3, 3, 2005); 
    Day day3 = new Day(4, 3, 2005); 
    Day day4 = new Day(5, 3, 2005); 
    timetablexydataset.add(day, 1.0D, "Series 1"); 
    timetablexydataset.add(day1, 1.7D, "Series 1"); 
    timetablexydataset.add(day2, 2.2999999999999998D, "Series 1"); 
    timetablexydataset.add(day3, 3.7000000000000002D, "Series 1"); 
    timetablexydataset.add(day4, 2.6000000000000001D, "Series 1"); 
    timetablexydataset.add(day, 3.2000000000000002D, "Series 2"); 
    timetablexydataset.add(day1, 1.1000000000000001D, "Series 2"); 
    timetablexydataset.add(day2, 1.3999999999999999D, "Series 2"); 
    timetablexydataset.add(day3, 2.8999999999999999D, "Series 2"); 
    timetablexydataset.add(day4, 0.59999999999999998D, "Series 2"); 
    return timetablexydataset; 
} 

回答

1

也许试试这个:

renderer.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator()); 
renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
      ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER)); 
renderer.setBaseItemLabelsVisible(true); 
+0

没有。没有做一件事。谢谢。 – Jeb 2012-07-24 08:51:33

+0

你可能会显示代码并解释什么是不正确的? – Dirk 2012-07-24 08:54:33

+0

是的。刚刚添加。 – Jeb 2012-07-24 08:57:48

1

请这个尝试: -

StackedBarRenderer barrenderer = (StackedBarRenderer)categoryplot.getRenderer(); 
barrenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 
barrenderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(
      ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER)); 

对于类别轴,您可以通过实现相同的: -

CategoryAxis axis = new CategoryAxis(); 
axis.setLabel("Date"); 
axis.setLabelFont(new Font("Courier", Font.BOLD, 16)); 
axis.setTickLabelFont(new Font("Courier", Font.BOLD, 11)); 
categoryplot.setDomainAxis(axis); 
+1

我使用StackedXYBarRenederer TableXYDataset - 我做它来操纵范围通过设置上部loewer范围很长。因此我没有一个CategoryPlot。如上所述,我使用xyPlot。所有这一切都说stackxybarrenderer.setBaseItemLabelGenerator(新的StandardCategoryItemLabelGenerator());不工作。谢谢。 – Jeb 2012-07-24 09:02:22

0

也许试试这个;)...我知道这是一个有点衬衫短袖,但我不认为有一个自动累计机制的JFreeChart 。

import java.text.DecimalFormat; 
import java.text.NumberFormat; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import org.jfree.chart.ChartPanel; 
import org.jfree.chart.JFreeChart; 
import org.jfree.chart.axis.DateAxis; 
import org.jfree.chart.axis.DateTickMarkPosition; 
import org.jfree.chart.axis.NumberAxis; 
import org.jfree.chart.labels.ItemLabelAnchor; 
import org.jfree.chart.labels.ItemLabelPosition; 
import org.jfree.chart.labels.XYItemLabelGenerator; 
import org.jfree.chart.plot.XYPlot; 
import org.jfree.chart.renderer.xy.StackedXYBarRenderer; 
import org.jfree.data.time.Day; 
import org.jfree.data.time.TimeTableXYDataset; 
import org.jfree.data.xy.TableXYDataset; 
import org.jfree.data.xy.XYDataset; 
import org.jfree.ui.ApplicationFrame; 
import org.jfree.ui.RefineryUtilities; 
import org.jfree.ui.TextAnchor; 


public class GroupLabels extends ApplicationFrame { 
    public GroupLabels(final String title) { 
     super(title); 

     final JFreeChart chart = createChart(createDataset()); 
     final ChartPanel panel = new ChartPanel(chart); 
     setContentPane(panel); 
    } 

    public static class MyXYItemLabelGenerator implements XYItemLabelGenerator { 
     Map<Number,List<Double>> totals = new HashMap<Number,List<Double>>(); 
     NumberFormat df = DecimalFormat.getNumberInstance(); 
     protected void init(XYDataset dataset) { 
      if (!totals.isEmpty()) return; 

      int seriesCnt = dataset.getSeriesCount(); 
      for (int series=0; series<seriesCnt; series++) { 
       for (int item=0; item<dataset.getItemCount(series); item++) { 
        Number key = dataset.getX(series, item); 
        List<Double> vals = totals.get(key); 
        if (!totals.containsKey(key)) { 
         vals = new ArrayList<Double>(seriesCnt); 
         for (int i=0;i<seriesCnt;i++) vals.add(0d); 
         totals.put(key, vals); 
        } 
        double val = dataset.getYValue(series, item); 
        for (int i=series-1; i>=0; i--) { 
         val += Double.isNaN(vals.get(i)) ? 0d : vals.get(i); 
        } 
        vals.set(series, val); 
       } 
      } 
     } 

     public String generateLabel(XYDataset dataset, int series, int item) { 
      init(dataset); 
      Number key = dataset.getX(series, item); 
      return df.format(totals.get(key).get(series)); 
     } 
    } 

    private JFreeChart createChart(TableXYDataset tablexydataset) { 
     DateAxis dateaxis = new DateAxis("Date"); 
     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); 
     return jfreechart; 
    } 

    private TableXYDataset createDataset() { 
     TimeTableXYDataset timetablexydataset = new TimeTableXYDataset(); 
     Day day = new Day(1, 3, 2005); 
     Day day1 = new Day(2, 3, 2005); 
     Day day2 = new Day(3, 3, 2005); 
     Day day3 = new Day(4, 3, 2005); 
     Day day4 = new Day(5, 3, 2005); 
     timetablexydataset.add(day, 1.0D, "Series 1"); 
     timetablexydataset.add(day1, 1.7D, "Series 1"); 
//  timetablexydataset.add(day2, 2.2999999999999998D, "Series 1"); 
     timetablexydataset.add(day3, 3.7000000000000002D, "Series 1"); 
     timetablexydataset.add(day4, 2.6000000000000001D, "Series 1"); 
     timetablexydataset.add(day, 3.2000000000000002D, "Series 2"); 
     timetablexydataset.add(day1, 1.1000000000000001D, "Series 2"); 
     timetablexydataset.add(day2, 1.3999999999999999D, "Series 2"); 
     timetablexydataset.add(day3, 2.8999999999999999D, "Series 2"); 
     timetablexydataset.add(day4, 0.59999999999999998D, "Series 2"); 
     return timetablexydataset; 
    } 

    public static void main(String[] args) { 
     GroupLabels demo = new GroupLabels("11626934 example"); 
     demo.pack(); 
     RefineryUtilities.centerFrameOnScreen(demo); 
     demo.setVisible(true); 
    } 
}