private void drawLegend(Context2D context) {
    if (legend != null && drawLegend) {
      legend.setContext(context);
      double tX = 0;
      double tY = 0;
      double offsetTop = calculateOffsetCausedByTitleAndSubtitle(context);
      Legend.LegendPosition position = legend.getPosition();

      if (position.equals(Legend.LegendPosition.LEGEND_POSITION_LEFT)) {
        tX = paddingLeft;
        tY = offsetTop;
      } else if (position.equals(Legend.LegendPosition.LEGEND_POSITION_RIGHT)) {
        tX = width - paddingRight - legend.getWidth();
        tY = offsetTop;
      } else if (position.equals(Legend.LegendPosition.LEGEND_POSITION_TOP)) {
        tX = paddingLeft;
        tY = offsetTop;
      } else if (position.equals(Legend.LegendPosition.LEGEND_POSITION_BOTTOM)) {
        tX = paddingLeft;
        tY = height - paddingBottom - legend.getHeight();
      }
      context.save();
      context.translate(tX, tY);
      legend.draw();
      context.restore();
    }
  }
  private void drawChart(Context2D context) {
    if (renderer != null) {
      double offsetTop = calculateOffsetCausedByTitleAndSubtitle(context);
      double chartWidth = width - paddingLeft - paddingRight;
      double chartHeight = height - offsetTop - paddingBottom;

      context.save();
      context.translate(paddingLeft, offsetTop);

      if (drawLegend && legend != null) {
        Legend.LegendPosition position = legend.getPosition();
        if (position.equals(Legend.LegendPosition.LEGEND_POSITION_LEFT)
            || position.equals(Legend.LegendPosition.LEGEND_POSITION_RIGHT)) {

          chartWidth -= legend.getWidth() + legendMargin;

          if (position.equals(Legend.LegendPosition.LEGEND_POSITION_LEFT)) {
            context.translate(legend.getWidth() + legendMargin, 0);
          }

        } else {
          chartHeight -= legend.getHeight() + legendMargin;
          if (position.equals(Legend.LegendPosition.LEGEND_POSITION_TOP)) {
            context.translate(0, legend.getHeight() + legendMargin);
          }
        }
      }

      context.resize(chartWidth, chartHeight);
      renderer.draw(context, dataseries, labels);
      context.restore();
    }
  }