public void drawLabelAxisAndVericallLines(Context2D context, DataSeriesList series, Labels labels, List<Double> valueAxisMarks) {

        boolean drawLabelAxis = isDrawLabelAxisOn();
        boolean drawVerticalLines = isDrawVerticalLinesOn();

        if (drawLabelAxis || drawVerticalLines) {

            double margin = drawLabelAxis ? getLabelAxisMargin() : 0;
            double axisMarkerSize = drawLabelAxis ? getAxisMarkerSize() : 0;
            double paddingLeft = getPaddingLeft();
            double paddingRight = getPaddingRight();
            double offsetX = getOffsetForValueAxis(context, series, valueAxisMarks);
            double width = context.getWidth() - paddingLeft - paddingRight - getOffsetForValueAxis(context, series, valueAxisMarks);
            double offsetY = getOffsetForLabelAxis(context, labels);
            double height = context.getHeight();
            Font font = getLabelAxisFont();
            Paint labelColor = getLabelColor();
            Color axisMarkerColor = getAxisMarkerColor();
            Color verticalLineColor = getVerticalLineColor();
            Stroke axisMarkerStroke = getAxisMarkerStroke();
            Stroke verticalLineStroke = getVerticalLineStroke();
            int numberOfLabels = series.getMaxDataSeriesLength();

            context.save();

            context.setFont(font);
            double step = width / numberOfLabels;

            String longestLabel = Utilities.calculateWidestLabel(context, labels);
            context.adjustFontSizeToFitTextInWidth(longestLabel, step);

            double halfStep = step / 2;
            double x;

            context.translate(offsetX + paddingLeft, height - offsetY);
            x = halfStep;
            for (int i = 0; i < numberOfLabels; i++) {
                String label = labels.get(i);

                if (drawVerticalLines) {
                    context.setPaint(verticalLineColor);
                    context.setStroke(verticalLineStroke);
                    context.draw(new Line2D.Double(x, 0, x, -height + offsetY));
                }

                if (drawLabelAxis) {
                    context.setPaint(axisMarkerColor);
                    context.setStroke(axisMarkerStroke);
                    context.draw(new Line2D.Double(x, 0, x, axisMarkerSize));

                    context.setPaint(labelColor);
                    context.drawText(label == null ? "" : label, x, axisMarkerSize + margin, Context2D.HORIZONTAL_ALIGN_CENTER, Context2D.VERTICAL_ALIGN_TOP, step);
                }

                x += step;
            }

            context.restore();

        }
    }