🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2691閲覧

散布図を20色使って表現したい

unu_tsk14

総合スコア10

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/01/19 04:44

##やりたいこと
20のクラスタのデータを散布図にプロットして,20色使ってプロットしたい

##現状
10色しか使われておらず,同じ色のデータが2種類ずつある

※凡例で0~9の色と10~19の色が同じ周期で使われている
イメージ説明

##該当部分のソースコード
プロットしている箇所のみ示します
※補足
categories:データのカテゴリ名を保持しているリスト(size=20)
out:プロットするデータ配列(size=データ数*2[次元])
y:データのラベルが入ったリスト

python

1f, ax = plt.subplots(1,1, figsize=(10, 10)) 2for i in range(len(categories)): 3 target_data = out[y == i] 4 ax.scatter(x=target_data[:,0],y=target_data[:,1], label=str(i), alpha=0.5) 5plt.legend(bbox_to_anchor=(1.02,1), loc='upper left')

##参考にしたソースコード
t-SNEによる高次元データの可視化
https://blog.imind.jp/entry/2019/06/25/004531

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

scatter() の c 引数で点の色を設定できます。
まず、カラーマップを利用して20色分の異なる色の配列を作成して、ループの中で scatter() を呼び出す際に c 引数で指定すればよいと思います。

python

1import numpy as np 2from matplotlib import pyplot as plt 3 4N = 20 # 作成する色の数 5cmap = plt.cm.get_cmap("hsv", N + 1) 6colors = cmap(np.arange(N)) 7print(colors)

投稿2021/01/19 05:04

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

unu_tsk14

2021/01/19 05:22

回答ありがとうございます. プロット前に前述のコードを挿入し,再度試みましたがエラーが発生しました.内容は以下の通りです # color setting N = len(categories) cmap=plt.cm.get_cmap("hsv",N+1) colors=cmap(np.arange(N)) print(colors) # plot f, ax = plt.subplots(1,1, figsize=(10, 10)) for i in range(len(categories)): target_data = out[y == i] ax.scatter(x=target_data[:,0],y=target_data[:,1],c=colors, label=str(i), alpha=0.5) plt.legend(bbox_to_anchor=(1.02,1), loc='upper left') 排出されたエラー↓ ValueError: 'c' argument has 20 elements, which is not acceptable for use with 'x' with size 125, 'y' with size 125. 125というのは各データが125件ずつ入っているのですが,解決法についてご存じでしょうか
tiitoi

2021/01/19 05:28

20色作成したうちの i 番目の色を使うので c=colors ではなく、c=colors[i] です
unu_tsk14

2021/01/19 05:28

以下の方法で解決しました # plot f, ax = plt.subplots(1,1, figsize=(10, 10)) for i in range(len(categories)): target_data = out[y == i] ax.scatter(x=target_data[:,0],y=target_data[:,1],c=colors[i], label=str(i), alpha=0.5) plt.legend(bbox_to_anchor=(1.02,1), loc='upper left') お手数おかけしました.ありがとうございました.
unu_tsk14

2021/01/19 05:29

重複しましたがご回答ありがとうございました. 非常に助かりました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問