Yotam Yotam - 3 months ago 51
Python Question

Setting different color for each series in scatter plot on matplotlib

Suppose I have three data sets:

X = [1,2,3,4]
Y1 = [4,8,12,16]
Y2 = [1,4,9,16]


I can scatter plot this:

from matplotlib import pyplot as plt
plt.scatter(X,Y1,color='red')
plt.scatter(X,Y2,color='blue')
plt.show()


How can I do this with 10 sets?

I searched for this and could find any reference to what I'm asking.

Edit: clearing (hopefully) my question

If I call scatter multiple times, I can only set the same color on each scatter. Also, I know I can set a color array manually but I'm sure there is a better way to do this.
My question is then, "How can I automatically scatter plot my several data set, each with different colors.

If that helps, I can easily assign a unique number to each data set.

DSM DSM
Answer

I don't know what you mean by 'manually'. You can choose a colourmap and make a colour array easily enough:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

x = np.arange(10)
ys = [i+x+(i*x)**2 for i in range(10)]

colors = cm.rainbow(np.linspace(0, 1, len(ys)))
for y, c in zip(ys, colors):
    plt.scatter(x, y, color=c)

or make your own colour cycler using itertools.cycle and specifying the colours you want to loop over, using next to get the one you want. For example (I'm too lazy to type out ten colours):

colors = itertools.cycle(["r", "b", "g"])
for y in ys:
    plt.scatter(x, y, color=next(colors))

Come to think of it, maybe it's cleaner not to use zip with the first one too:

colors = iter(cm.rainbow(np.linspace(0, 1, len(ys))))
for y in ys:
    plt.scatter(x, y, color=next(colors))

[PS: I really hate that I have to drop the 'u' when working with matplotlib..]

Comments