假设我有三个数据集:

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

我可以画散点图:

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

我怎么能有10组?

我搜索了这个,可以找到任何参考我的问题。

编辑:澄清(希望)我的问题

如果我多次调用scatter,我只能在每个scatter上设置相同的颜色。此外,我知道我可以手动设置颜色数组,但我相信有更好的方法来做到这一点。 然后我的问题是,“我如何自动地分散绘制我的几个数据集,每个数据集都有不同的颜色。

如果这有帮助,我可以轻松地为每个数据集分配一个唯一的数字。


当前回答

你也可以创建一个颜色列表,其中包括你在散点图中需要的所有颜色,并将其作为一个参数,如下所示:

colors = ["red", "blue", "green"]
plt.scatter(X, Y, color = colors)

其他回答

我不知道你说的“手动”是什么意思。你可以很容易地选择一个颜色地图并创建一个颜色数组:

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)

或者你可以使用itertools创建自己的颜色循环器。循环并指定你想要循环的颜色,使用next来获得你想要的颜色。例如,用3种颜色:

import itertools

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

仔细想想,也许第一个也不使用zip更干净:

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

对于大数据集和有限数量的颜色,一个更快的解决方案是使用Pandas和groupby函数:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import time


# a generic set of data with associated colors
nsamples=1000
x=np.random.uniform(0,10,nsamples)
y=np.random.uniform(0,10,nsamples)
colors={0:'r',1:'g',2:'b',3:'k'}
c=[colors[i] for i in np.round(np.random.uniform(0,3,nsamples),0)]

plt.close('all')

# "Fast" Scatter plotting
starttime=time.time()
# 1) make a dataframe
df=pd.DataFrame()
df['x']=x
df['y']=y
df['c']=c
plt.figure()
# 2) group the dataframe by color and loop
for g,b in df.groupby(by='c'):
    plt.scatter(b['x'],b['y'],color=g)
print('Fast execution time:', time.time()-starttime)

# "Slow" Scatter plotting
starttime=time.time()
plt.figure()
# 2) group the dataframe by color and loop
for i in range(len(x)):
    plt.scatter(x[i],y[i],color=c[i])
print('Slow execution time:', time.time()-starttime)

plt.show()

你也可以创建一个颜色列表,其中包括你在散点图中需要的所有颜色,并将其作为一个参数,如下所示:

colors = ["red", "blue", "green"]
plt.scatter(X, Y, color = colors)

这对我来说很管用:

对于每个系列,使用随机RGB颜色生成器

c = color[np.random.random_sample(), np.random.random_sample(), np.random.random_sample()]

你总是可以像这样使用plot()函数:

import matplotlib.pyplot as plt

import numpy as np

x = np.arange(10)
ys = [i+x+(i*x)**2 for i in range(10)]
plt.figure()
for y in ys:
    plt.plot(x, y, 'o')
plt.show()