Matplotlib - change marker color along plot line

I would like to build a 2d dataset with matplotlib so that the marker color for each data point is different. I found an example for multi-colored lines ( http://matplotlib.org/examples/pylab_examples/multicolored_line.html ). However, this does not work when building a line with markers.

In the solution, I came up with individual stories at each point:

import matplotlib.cm as cm import matplotlib.pyplot as plt import numpy as np # The data x = np.linspace(0, 10, 1000) y = np.sin(2 * np.pi * x) # The colormap cmap = cm.jet # Create figure and axes fig = plt.figure(1) fig.clf() ax = fig.add_subplot(1, 1, 1) # Plot every single point with different color for i in range(len(x)): c = cmap(int(np.rint(x[i] / x.max() * 255))) ax.plot(x[i], y[i], 'o', mfc=c, mec=c) ax.set_xlim([x[0], x[-1]]) ax.set_ylim([-1.1, 1.1]) ax.set_xlabel('x') ax.set_ylabel('y') plt.draw() plt.show() # Save the figure fig.savefig('changing_marker_color.png', dpi=80) 

The resulting plot looks as it should, but the plot becomes very slow, and I need it pretty quickly. Is there a smart trick to speed up charting?

+8
python matplotlib plot
source share
1 answer

I believe you can achieve this with ax.scatter :

 # The data x = np.linspace(0, 10, 1000) y = np.sin(2 * np.pi * x) # The colormap cmap = cm.jet # Create figure and axes fig = plt.figure(1) fig.clf() ax = fig.add_subplot(1, 1, 1) c = np.linspace(0, 10, 1000) ax.scatter(x, y, c=c, cmap=cmap) 

Scatter takes c as a sequence of floats, which will be mapped to colors using cmap.

enter image description here

Using timeit , I get a 10-fold reduction in time (about 1.25 s for the original method and 76.8 ms here)

+16
source share

All Articles