Pie Chart

The Charting library

See Category chart for an introduction to the charting library.

What is a pie chart?

A pie chart is a circular visualization of a single data series. The pie chart is provided by the WPieChart widget. The class supports both plain 2D pies, and a 3D effect (as used below). In the example the first segment is separated from the pie for emphasis.

Example
Item
Sales
Blueberry
120
Cherry
30
Apple
260
Boston Cream
160
Other
40
Vanilla Cream
120
source
  class NumericItem extends WStandardItem {
    private static Logger logger = LoggerFactory.getLogger(NumericItem.class);

    WStandardItem clone() {
      return new NumericItem();
    }

    void setData(final Object data, ItemDataRole role) {
      if (role.equals(ItemDataRole.Edit)) {
        Object dt = new Object();
        double d = StringUtils.asNumber(data);
        if (d != d) {
          dt = data;
        } else {
          dt = d;
        }
        super.setData(dt, role);
      } else {
        super.setData(data, role);
      }
    }
  }

  void PieChart() {
    WContainerWidget container = new WContainerWidget();
    WStandardItemModel model = new WStandardItemModel();
    model.setItemPrototype(new NumericItem());
    model.insertColumns(model.getColumnCount(), 2);
    model.setHeaderData(0, new WString("Item"));
    model.setHeaderData(1, new WString("Sales"));
    model.insertRows(model.getRowCount(), 6);
    int row = 0;
    model.setData(row, 0, new WString("Blueberry"));
    model.setData(row, 1, new WString("Blueberry"), ItemDataRole.ToolTip);
    model.setData(row, 1, 120);
    model.setData(++row, 0, new WString("Cherry"));
    model.setData(row, 1, 30);
    model.setData(++row, 0, new WString("Apple"));
    model.setData(row, 1, 260);
    model.setData(++row, 0, new WString("Boston Cream"));
    model.setData(row, 1, 160);
    model.setData(++row, 0, new WString("Other"));
    model.setData(row, 1, 40);
    model.setData(++row, 0, new WString("Vanilla Cream"));
    model.setData(row, 1, 120);
    for (row = 0; row < model.getRowCount(); ++row) {
      for (int col = 0; col < model.getColumnCount(); ++col) {
        model.getItem(row, col).setFlags(EnumSet.of(ItemFlag.Editable));
      }
    }
    WTableView table = new WTableView((WContainerWidget) container);
    table.setMargin(new WLength(10), EnumSet.of(Side.Top, Side.Bottom));
    table.setMargin(WLength.Auto, EnumSet.of(Side.Left, Side.Right));
    table.setSortingEnabled(true);
    table.setModel(model);
    table.setColumnWidth(1, new WLength(100));
    table.setRowHeight(new WLength(28));
    table.setHeaderHeight(new WLength(28));
    table.setWidth(new WLength(150 + 100 + 14 + 2));
    if (WApplication.getInstance().getEnvironment().hasAjax()) {
      table.setEditTriggers(EnumSet.of(EditTrigger.SingleClicked));
    } else {
      table.setEditTriggers(EnumSet.of(EditTrigger.None));
    }
    WPieChart chart = new WPieChart((WContainerWidget) container);
    chart.setModel(model);
    chart.setLabelsColumn(0);
    chart.setDataColumn(1);
    chart.setDisplayLabels(
        EnumUtils.or(
            EnumSet.of(LabelOption.Outside, LabelOption.TextLabel), LabelOption.TextPercentage));
    chart.setPerspectiveEnabled(true, 0.2);
    chart.setShadowEnabled(true);
    chart.setExplode(0, 0.3);
    chart.resize(new WLength(800), new WLength(300));
    chart.setMargin(new WLength(10), EnumSet.of(Side.Top, Side.Bottom));
    chart.setMargin(WLength.Auto, EnumSet.of(Side.Left, Side.Right));
  }

Top