質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.51%

  • Python 3.x

    6389questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Matplotlib

    311questions

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

matplotlib.pyplotの色をデータ内別の列の値を元に色を変更したい

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 404

931kozuzu

score 3

 matplotlib.pyplotの色をデータ内別の列の値を元に色を変更したい

python3のmatplotlibの色付けで困っています。
plt.scatterで図示した点に元データの別の列の値を基に色を変更したいのですが、どう指定すればいいのでしょうか。
下記のnumpy arrayの第三列の値を基に、1であれば赤、2であれば青のように散布図に色付けをしたいのです。
scatterの引数、xは最終列、yは第二列としています。

 元データ

array([[  1. ,   4.2,   1. ,   0.5],
       [  2. ,  11.5,   1. ,   0.5],
       [  3. ,   7.3,   1. ,   0.5],
       [  4. ,   5.8,   1. ,   0.5],
       [  5. ,   6.4,   1. ,   0.5],
       [  6. ,  10. ,   1. ,   0.5],
       [  7. ,  11.2,   1. ,   0.5],
       [  8. ,  11.2,   1. ,   0.5],
       [  9. ,   5.2,   1. ,   0.5],
       [ 10. ,   7. ,   1. ,   0.5],
       [ 11. ,  16.5,   1. ,   1. ],
       [ 12. ,  16.5,   1. ,   1. ],
       [ 13. ,  15.2,   1. ,   1. ],
       [ 14. ,  17.3,   1. ,   1. ],
       [ 15. ,  22.5,   1. ,   1. ],
       [ 16. ,  17.3,   1. ,   1. ],
       [ 17. ,  13.6,   1. ,   1. ],
       [ 18. ,  14.5,   1. ,   1. ],
       [ 19. ,  18.8,   1. ,   1. ],
       [ 20. ,  15.5,   1. ,   1. ],
       [ 21. ,  23.6,   1. ,   2. ],
       [ 22. ,  18.5,   1. ,   2. ],
       [ 23. ,  33.9,   1. ,   2. ],
       [ 24. ,  25.5,   1. ,   2. ],
       [ 25. ,  26.4,   1. ,   2. ],
       [ 26. ,  32.5,   1. ,   2. ],
       [ 27. ,  26.7,   1. ,   2. ],
       [ 28. ,  21.5,   1. ,   2. ],
       [ 29. ,  23.3,   1. ,   2. ],
       [ 30. ,  29.5,   1. ,   2. ],
       [ 31. ,  15.2,   2. ,   0.5],
       [ 32. ,  21.5,   2. ,   0.5],
       [ 33. ,  17.6,   2. ,   0.5],
       [ 34. ,   9.7,   2. ,   0.5],
       [ 35. ,  14.5,   2. ,   0.5],
       [ 36. ,  10. ,   2. ,   0.5],
       [ 37. ,   8.2,   2. ,   0.5],
       [ 38. ,   9.4,   2. ,   0.5],
       [ 39. ,  16.5,   2. ,   0.5],
       [ 40. ,   9.7,   2. ,   0.5],
       [ 41. ,  19.7,   2. ,   1. ],
       [ 42. ,  23.3,   2. ,   1. ],
       [ 43. ,  23.6,   2. ,   1. ],
       [ 44. ,  26.4,   2. ,   1. ],
       [ 45. ,  20. ,   2. ,   1. ],
       [ 46. ,  25.2,   2. ,   1. ],
       [ 47. ,  25.8,   2. ,   1. ],
       [ 48. ,  21.2,   2. ,   1. ],
       [ 49. ,  14.5,   2. ,   1. ],
       [ 50. ,  27.3,   2. ,   1. ],
       [ 51. ,  25.5,   2. ,   2. ],
       [ 52. ,  26.4,   2. ,   2. ],
       [ 53. ,  22.4,   2. ,   2. ],
       [ 54. ,  24.5,   2. ,   2. ],
       [ 55. ,  24.8,   2. ,   2. ],
       [ 56. ,  30.9,   2. ,   2. ],
       [ 57. ,  26.4,   2. ,   2. ],
       [ 58. ,  27.3,   2. ,   2. ],
       [ 59. ,  29.4,   2. ,   2. ],
       [ 60. ,  23. ,   2. ,   2. ]])
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+2

ListedColormap により

from matplotlib.colors import ListedColormap
colors = ['red','blue']
my_cmap = ListedColormap(colors)

のように独自のカラーマップを生成することで簡単に実装できます。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

data =np.array(
    [[  1. ,   4.2,   1. ,   0.5],
     [  2. ,  11.5,   1. ,   0.5],
     [  3. ,   7.3,   1. ,   0.5],
     [  4. ,   5.8,   1. ,   0.5],
     [  5. ,   6.4,   1. ,   0.5],
     [  6. ,  10. ,   1. ,   0.5],
     [  7. ,  11.2,   1. ,   0.5],
     [  8. ,  11.2,   1. ,   0.5],
     [  9. ,   5.2,   1. ,   0.5],
     [ 10. ,   7. ,   1. ,   0.5],
     [ 11. ,  16.5,   1. ,   1. ],
     [ 12. ,  16.5,   1. ,   1. ],
     [ 13. ,  15.2,   1. ,   1. ],
     [ 14. ,  17.3,   1. ,   1. ],
     [ 15. ,  22.5,   1. ,   1. ],
     [ 16. ,  17.3,   1. ,   1. ],
     [ 17. ,  13.6,   1. ,   1. ],
     [ 18. ,  14.5,   1. ,   1. ],
     [ 19. ,  18.8,   1. ,   1. ],
     [ 20. ,  15.5,   1. ,   1. ],
     [ 21. ,  23.6,   1. ,   2. ],
     [ 22. ,  18.5,   1. ,   2. ],
     [ 23. ,  33.9,   1. ,   2. ],
     [ 24. ,  25.5,   1. ,   2. ],
     [ 25. ,  26.4,   1. ,   2. ],
     [ 26. ,  32.5,   1. ,   2. ],
     [ 27. ,  26.7,   1. ,   2. ],
     [ 28. ,  21.5,   1. ,   2. ],
     [ 29. ,  23.3,   1. ,   2. ],
     [ 30. ,  29.5,   1. ,   2. ],
     [ 31. ,  15.2,   2. ,   0.5],
     [ 32. ,  21.5,   2. ,   0.5],
     [ 33. ,  17.6,   2. ,   0.5],
     [ 34. ,   9.7,   2. ,   0.5],
     [ 35. ,  14.5,   2. ,   0.5],
     [ 36. ,  10. ,   2. ,   0.5],
     [ 37. ,   8.2,   2. ,   0.5],
     [ 38. ,   9.4,   2. ,   0.5],
     [ 39. ,  16.5,   2. ,   0.5],
     [ 40. ,   9.7,   2. ,   0.5],
     [ 41. ,  19.7,   2. ,   1. ],
     [ 42. ,  23.3,   2. ,   1. ],
     [ 43. ,  23.6,   2. ,   1. ],
     [ 44. ,  26.4,   2. ,   1. ],
     [ 45. ,  20. ,   2. ,   1. ],
     [ 46. ,  25.2,   2. ,   1. ],
     [ 47. ,  25.8,   2. ,   1. ],
     [ 48. ,  21.2,   2. ,   1. ],
     [ 49. ,  14.5,   2. ,   1. ],
     [ 50. ,  27.3,   2. ,   1. ],
     [ 51. ,  25.5,   2. ,   2. ],
     [ 52. ,  26.4,   2. ,   2. ],
     [ 53. ,  22.4,   2. ,   2. ],
     [ 54. ,  24.5,   2. ,   2. ],
     [ 55. ,  24.8,   2. ,   2. ],
     [ 56. ,  30.9,   2. ,   2. ],
     [ 57. ,  26.4,   2. ,   2. ],
     [ 58. ,  27.3,   2. ,   2. ],
     [ 59. ,  29.4,   2. ,   2. ],
     [ 60. ,  23. ,   2. ,   2. ]])

my_cmap = ListedColormap(['red','blue'])
plt.scatter(x=data[:,3], y=data[:,1], c=data[:,2], cmap=my_cmap)
plt.show()

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/11 21:30

    c=data[:, 2]という書き方をすればよかったのですね。
    c, cmapまではたどり着けたのですが、日本語のドキュメントがなく、とても参考なりました。ありがとうございました。

    キャンセル

checkベストアンサー

+1

こんな感じでどうですか。

import numpy as np
import matplotlib.pyplot as plt

a = np.array([[  1. ,   4.2,   1. ,   0.5],
              [  2. ,  11.5,   1. ,   0.5],
              [  3. ,   7.3,   1. ,   0.5],
              [  4. ,   5.8,   1. ,   0.5],
              [  5. ,   6.4,   1. ,   0.5],
              [  6. ,  10. ,   1. ,   0.5],
              [  7. ,  11.2,   1. ,   0.5],
              [  8. ,  11.2,   1. ,   0.5],
              [  9. ,   5.2,   1. ,   0.5],
              [ 10. ,   7. ,   1. ,   0.5],
              [ 11. ,  16.5,   1. ,   1. ],
              [ 12. ,  16.5,   1. ,   1. ],
              [ 13. ,  15.2,   1. ,   1. ],
              [ 14. ,  17.3,   1. ,   1. ],
              [ 15. ,  22.5,   1. ,   1. ],
              [ 16. ,  17.3,   1. ,   1. ],
              [ 17. ,  13.6,   1. ,   1. ],
              [ 18. ,  14.5,   1. ,   1. ],
              [ 19. ,  18.8,   1. ,   1. ],
              [ 20. ,  15.5,   1. ,   1. ],
              [ 21. ,  23.6,   1. ,   2. ],
              [ 22. ,  18.5,   1. ,   2. ],
              [ 23. ,  33.9,   1. ,   2. ],
              [ 24. ,  25.5,   1. ,   2. ],
              [ 25. ,  26.4,   1. ,   2. ],
              [ 26. ,  32.5,   1. ,   2. ],
              [ 27. ,  26.7,   1. ,   2. ],
              [ 28. ,  21.5,   1. ,   2. ],
              [ 29. ,  23.3,   1. ,   2. ],
              [ 30. ,  29.5,   1. ,   2. ],
              [ 31. ,  15.2,   2. ,   0.5],
              [ 32. ,  21.5,   2. ,   0.5],
              [ 33. ,  17.6,   2. ,   0.5],
              [ 34. ,   9.7,   2. ,   0.5],
              [ 35. ,  14.5,   2. ,   0.5],
              [ 36. ,  10. ,   2. ,   0.5],
              [ 37. ,   8.2,   2. ,   0.5],
              [ 38. ,   9.4,   2. ,   0.5],
              [ 39. ,  16.5,   2. ,   0.5],
              [ 40. ,   9.7,   2. ,   0.5],
              [ 41. ,  19.7,   2. ,   1. ],
              [ 42. ,  23.3,   2. ,   1. ],
              [ 43. ,  23.6,   2. ,   1. ],
              [ 44. ,  26.4,   2. ,   1. ],
              [ 45. ,  20. ,   2. ,   1. ],
              [ 46. ,  25.2,   2. ,   1. ],
              [ 47. ,  25.8,   2. ,   1. ],
              [ 48. ,  21.2,   2. ,   1. ],
              [ 49. ,  14.5,   2. ,   1. ],
              [ 50. ,  27.3,   2. ,   1. ],
              [ 51. ,  25.5,   2. ,   2. ],
              [ 52. ,  26.4,   2. ,   2. ],
              [ 53. ,  22.4,   2. ,   2. ],
              [ 54. ,  24.5,   2. ,   2. ],
              [ 55. ,  24.8,   2. ,   2. ],
              [ 56. ,  30.9,   2. ,   2. ],
              [ 57. ,  26.4,   2. ,   2. ],
              [ 58. ,  27.3,   2. ,   2. ],
              [ 59. ,  29.4,   2. ,   2. ],
              [ 60. ,  23. ,   2. ,   2. ]])

plt.figure()
for ci in [1,2]:
    data = a[a[:,2] == ci]
    plt.scatter(data[:,3], data[:,1], c="rb"[ci-1], label="data{}".format(ci))
plt.legend()
plt.show()

イメージ説明
色はcオプションで指定できます。実は2回scatterを呼ばないで、データ数分の色情報を入れたリストを入れてもできるんですが、2回呼んだ方が簡単に汎用性の高い描画ができるので(labelが貼れたりマーカー設定できたり)、そうするのが一般的です。

参考:
matplotlib で散布図 (Scatter plot) を描く – Python でデータサイエンス
matplotlib で指定可能な色の名前と一覧 – Python でデータサイエンス

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/11 21:28

    ありがとうございました。おかげで無事想定通りの動作を確認できました。

    キャンセル

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

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python 3.x

    6389questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • Matplotlib

    311questions

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