genieclust.plots

Various plotting functions

genieclust.plots.plot_scatter(X, y=None, labels=None, **kwargs)

Draws a scatter plot

Parameters
Xarray_like

Either a two-column matrix that gives the x and y coordinates of the points or a vector of length n. In the latter case, y must be a vector of length n as well.

yNone or array_like

The y coordinates of the n points in the case where X is a vector.

labelsNone or array_like

A vector of n integer labels that correspond to each point in X, that gives its plot style.

**kwargsCollection properties

Further arguments to matplotlib.pyplot.scatter.

Notes

If X is a two-column matrix, then plot_scatter(X) is equivalent to plot_scatter(X[:,0], X[:,1]).

Unlike in matplotlib.pyplot.scatter, for any fixed j, all points X[i,:] such that labels[i] == j are always drawn in the same way, no matter the max(labels). In particular, labels 0, 1, 2, and 3 correspond to black, red, green, and blue, respectively.

This function was inspired by the plot() function from the R package graphics.

Examples

An example scatter plots where each point is assigned one of two distinct labels:

>>> n = np.r_[100, 50]
>>> X = np.r_[np.random.randn(n[0], 2), np.random.randn(n[1], 2)+2.0]
>>> l = np.repeat([0, 1], n)
>>> genieclust.plots.plot_scatter(X, labels=l)
>>> plt.show()                                   

(png, hires.png, pdf)

_images/genieclust_plots-1.png

Here are the first 10 plotting styles:

>>> ncol = len(genieclust.plots.col)
>>> nmrk = len(genieclust.plots.mrk)
>>> mrk_recycled = np.tile(
...     genieclust.plots.mrk,
...     int(np.ceil(ncol/nmrk)))[:ncol]
>>> for i in range(10):                               
...     plt.text(                                     
...         i, 0, i, horizontalalignment="center")    
...     plt.plot(                                     
...         i, 1, marker=mrk_recycled[i],             
...         color=genieclust.plots.col[i],            
...         markersize=25)                            
>>> plt.title("Plotting styles for labels=0,1,...,9") 
>>> plt.ylim(-3,4)                                    
>>> plt.axis("off")                                   
>>> plt.show()                                        

(png, hires.png, pdf)

_images/genieclust_plots-2.png
genieclust.plots.plot_segments(pairs, X, y=None, style='k-', **kwargs)

Draws a set of disjoint line segments

Parameters
pairsarray_like

A two-column matrix that gives the pairs of indices defining the line segments to draw.

Xarray_like

Either a two-column matrix that gives the x and y coordinates of the points or a vector of length n. In the latter case, y must be a vector of length n as well.

yNone or array_like

The y coordinates of the n points in the case where X is a vector.

style:

See matplotlib.pyplot.plot.

**kwargsCollection properties

Further arguments to matplotlib.pyplot.plot.

Notes

The function draws a set of disjoint line segments from (X[pairs[i,0],0], X[pairs[i,0],1]) to (X[pairs[i,1],0], X[pairs[i,1],1]) for all i from 0 to pairs.shape[0]-1.

matplotlib.pyplot.plot is called only once. Therefore, you can expect it to be pretty pretty fast.

Examples

Plotting the convex hull of a point set:

>>> import scipy.spatial
>>> X = np.random.randn(100, 2)
>>> hull = scipy.spatial.ConvexHull(X)
>>> genieclust.plots.plot_scatter(X)
>>> genieclust.plots.plot_segments(hull.simplices, X, style="r--")
>>> plt.show()                                 

(png, hires.png, pdf)

_images/genieclust_plots-3.png

Plotting the minimum spanning tree:

>>> X = np.random.randn(100, 2)
>>> mst = genieclust.internal.mst_from_distance(X, "euclidean")
>>> genieclust.plots.plot_scatter(X)
>>> genieclust.plots.plot_segments(mst[1], X, style="m-.")
>>> plt.axis("equal")                          
>>> plt.show()                                 

(png, hires.png, pdf)

_images/genieclust_plots-4.png