1. ホーム
  2. python

[解決済み】matplotlibで散布図に系列ごとに異なる色を設定する

2022-04-22 15:40:13

質問

3つのデータセットがあるとします。

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で同じ色しか設定できないのですが、どうすればいいですか?また、手動で色の配列を設定できることは知っていますが、もっと良い方法があるはずです。 そこで質問なのですが、複数のデータセットをそれぞれ異なる色で自動的に散布図にするにはどうしたらいいのでしょうか?

もしそれが役に立つなら、各データセットにユニークな番号を簡単に割り当てることができますね。

どのように解決するのですか?

手動で」というのがどういう意味かわからないのですが。 カラーマップを選んで色配列を作るのは簡単なんだけどね。

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.cycle を使い、ループさせたい色を指定します。 next を使えば、欲しいものを手に入れることができます。 例えば、3色で。

import itertools

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

そういえば、もしかして zip というのも、1つ目もそうでした。

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