def radviz(frame, class_column, ax=None, color=None, colormap=None, **kwds):
import matplotlib.pyplot as plt<EOL>import matplotlib.patches as patches<EOL>def normalize(series):<EOL><INDENT>a = min(series)<EOL>b = max(series)<EOL>return (series - a) / (b - a)<EOL><DEDENT>n = len(frame)<EOL>classes = frame[class_column].drop_duplicates()<EOL>class_col = frame[class_column]<EOL>df = frame.drop(class_column, axis=<NUM_LIT:1>).apply(normalize)<EOL>if ax is None:<EOL><INDENT>ax = plt.gca(xlim=[-<NUM_LIT:1>, <NUM_LIT:1>], ylim=[-<NUM_LIT:1>, <NUM_LIT:1>])<EOL><DEDENT>to_plot = {}<EOL>colors = _get_standard_colors(num_colors=len(classes), colormap=colormap,<EOL>color_type='<STR_LIT>', color=color)<EOL>for kls in classes:<EOL><INDENT>to_plot[kls] = [[], []]<EOL><DEDENT>m = len(frame.columns) - <NUM_LIT:1><EOL>s = np.array([(np.cos(t), np.sin(t))<EOL>for t in [<NUM_LIT> * np.pi * (i / float(m))<EOL>for i in range(m)]])<EOL>for i in range(n):<EOL><INDENT>row = df.iloc[i].values<EOL>row_ = np.repeat(np.expand_dims(row, axis=<NUM_LIT:1>), <NUM_LIT:2>, axis=<NUM_LIT:1>)<EOL>y = (s * row_).sum(axis=<NUM_LIT:0>) / row.sum()<EOL>kls = class_col.iat[i]<EOL>to_plot[kls][<NUM_LIT:0>].append(y[<NUM_LIT:0>])<EOL>to_plot[kls][<NUM_LIT:1>].append(y[<NUM_LIT:1>])<EOL><DEDENT>for i, kls in enumerate(classes):<EOL><INDENT>ax.scatter(to_plot[kls][<NUM_LIT:0>], to_plot[kls][<NUM_LIT:1>], color=colors[i],<EOL>label=pprint_thing(kls), **kwds)<EOL><DEDENT>ax.legend()<EOL>ax.add_patch(patches.Circle((<NUM_LIT:0.0>, <NUM_LIT:0.0>), radius=<NUM_LIT:1.0>, facecolor='<STR_LIT:none>'))<EOL>for xy, name in zip(s, df.columns):<EOL><INDENT>ax.add_patch(patches.Circle(xy, radius=<NUM_LIT>, facecolor='<STR_LIT>'))<EOL>if xy[<NUM_LIT:0>] < <NUM_LIT:0.0> and xy[<NUM_LIT:1>] < <NUM_LIT:0.0>:<EOL><INDENT>ax.text(xy[<NUM_LIT:0>] - <NUM_LIT>, xy[<NUM_LIT:1>] - <NUM_LIT>, name,<EOL>ha='<STR_LIT:right>', va='<STR_LIT>', size='<STR_LIT>')<EOL><DEDENT>elif xy[<NUM_LIT:0>] < <NUM_LIT:0.0> and xy[<NUM_LIT:1>] >= <NUM_LIT:0.0>:<EOL><INDENT>ax.text(xy[<NUM_LIT:0>] - <NUM_LIT>, xy[<NUM_LIT:1>] + <NUM_LIT>, name,<EOL>ha='<STR_LIT:right>', va='<STR_LIT>', size='<STR_LIT>')<EOL><DEDENT>elif xy[<NUM_LIT:0>] >= <NUM_LIT:0.0> and xy[<NUM_LIT:1>] < <NUM_LIT:0.0>:<EOL><INDENT>ax.text(xy[<NUM_LIT:0>] + <NUM_LIT>, xy[<NUM_LIT:1>] - <NUM_LIT>, name,<EOL>ha='<STR_LIT:left>', va='<STR_LIT>', size='<STR_LIT>')<EOL><DEDENT>elif xy[<NUM_LIT:0>] >= <NUM_LIT:0.0> and xy[<NUM_LIT:1>] >= <NUM_LIT:0.0>:<EOL><INDENT>ax.text(xy[<NUM_LIT:0>] + <NUM_LIT>, xy[<NUM_LIT:1>] + <NUM_LIT>, name,<EOL>ha='<STR_LIT:left>', va='<STR_LIT>', size='<STR_LIT>')<EOL><DEDENT><DEDENT>ax.axis('<STR_LIT>')<EOL>return ax<EOL>
Plot a multidimensional dataset in 2D.

Each Series in the DataFrame is represented as a evenly distributed
slice on a circle. Each data point is rendered in the circle according to
the value on each Series. Highly correlated `Series` in the `DataFrame`
are placed closer on the unit circle.

RadViz allow to project a N-dimensional data set into a 2D space where the
influence of each dimension can be interpreted as a balance between the
influence of all dimensions.

More info available at the `original article
<http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.135.889>`_
describing RadViz.

Parameters
----------
frame : `DataFrame`
    Pandas object holding the data.
class_column : str
    Column name containing the name of the data point category.
ax : :class:`matplotlib.axes.Axes`, optional
    A plot instance to which to add the information.
color : list[str] or tuple[str], optional
    Assign a color to each category. Example: ['blue', 'green'].
colormap : str or :class:`matplotlib.colors.Colormap`, default None
    Colormap to select colors from. If string, load colormap with that
    name from matplotlib.
kwds : optional
    Options to pass to matplotlib scatter plotting method.

Returns
-------
class:`matplotlib.axes.Axes`

See Also
--------
plotting.andrews_curves : Plot clustering visualization.

Examples
--------
.. plot::
    :context: close-figs

    >>> df = pd.DataFrame({
    ...         'SepalLength': [6.5, 7.7, 5.1, 5.8, 7.6, 5.0, 5.4, 4.6,
    ...                         6.7, 4.6],
    ...         'SepalWidth': [3.0, 3.8, 3.8, 2.7, 3.0, 2.3, 3.0, 3.2,
    ...                        3.3, 3.6],
    ...         'PetalLength': [5.5, 6.7, 1.9, 5.1, 6.6, 3.3, 4.5, 1.4,
    ...                         5.7, 1.0],
    ...         'PetalWidth': [1.8, 2.2, 0.4, 1.9, 2.1, 1.0, 1.5, 0.2,
    ...                        2.1, 0.2],
    ...         'Category': ['virginica', 'virginica', 'setosa',
    ...                      'virginica', 'virginica', 'versicolor',
    ...                      'versicolor', 'setosa', 'virginica',
    ...                      'setosa']
    ...     })
    >>> rad_viz = pd.plotting.radviz(df, 'Category')  # doctest: +SKIP