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

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

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

Q&A

解決済

3回答

2392閲覧

PythonでCSVファイルから3要素のデータを読み込み、散布図を出力させたい

Yuulis

総合スコア4

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

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

0グッド

0クリップ

投稿2021/10/21 06:55

編集2021/10/22 04:05

前提・実現したいこと

約10000件の研究データを記録したCSVファイルがあります。

X座標Y座標-1, 0, 1のいずれかの値(Aとする)
-16.342624664306612.31145668029791
.........

これを用いて、横軸にX座標、縦軸にY座標を取った2次元の散布図に、Aの値で色分けをして点をプロットしていきたいです。

発生している問題

2次元の散布図は2変数の関係を表すものなので、どうしてもAの値で色分けしてプロットすることができません。解決方法はあるのかを教えていただきたいです。もしなければ、高さの軸にAの値を取った3次元の散布図で、Aの値で色分けする方法を教えていただきたいです。

使用しているバージョン

Python 3.8.5

追記

@can110さんの方法で以下のスクリプトで試しました。CSVファイルは3FloorLv4_result_2021-10-20-20-47-55.csvという名前です。

test.py

1import matplotlib.pyplot as plt 2import numpy as np 3import pandas as pd 4 5# data = np.hstack([np.random.randint(0, 100, (30, 2)), np.random.randint(-1, 2, (30, 1))]) 6data = pd.read_csv("3FloorLv4_result_2021-10-20-20-47-55.csv", usecols=[0, 1, 2], nrows=1000, dtype="float") 7df = pd.DataFrame(data, columns=list("XZS")) 8 9colorList = {-1.0 : "r", 0.0 : "g", 1.0 : "b"} 10labelName = {-1 : "Error", 0 : "Failure", 1 : "Success"} 11 12for s in set(df["S"]) : 13 df2 = df[df["S"] == s] 14 c = colorList[s] 15 l = labelName[s] 16 plt.scatter(df2.X, df2.Z, color=c, label=l) 17 18plt.legend() 19plt.show() 20

すると、次のエラーが出ました。

Traceback (most recent call last): File "c:\Users\yuulis\ML-Agents\EL_3Floor\DrawGragh.py", line 14, in <module> c = colorList[s] KeyError: nan

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

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

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

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

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

guest

回答3

0

力押で行けそうだなぁと思って作ってる間に綺麗なのが投稿されてたけど供養のために投稿しとこ

Python

1from re import X 2import numpy as np 3import matplotlib.pyplot as plt 4import csv 5 6with open('data1.csv') as f: 7 reader = csv.reader(f) 8 l = [row for row in reader] 9 10x_=[] 11y_=[] 12x0=[] 13y0=[] 14x1=[] 15y1=[] 16 17#分岐 18for i in range(len(l)): 19 if l[i][2]=="-1": 20 x_.append(float(l[i][0])) 21 y_.append(float(l[i][1])) 22 elif l[i][2]=="1": 23 x1.append(float(l[i][0])) 24 y1.append(float(l[i][1])) 25 elif l[i][2]=="0": 26 x0.append(float(l[i][0])) 27 y0.append(float(l[i][1])) 28 29# figureを生成する 30fig = plt.figure() 31 32# axをfigureに設定する 33ax = fig.add_subplot(1,1,1) 34 35# axesに散布図を設定する 36ax.scatter(x_, y_, c='b') 37ax.scatter(x1, y1, c='r') 38ax.scatter(x0, y0, c='g') 39 40# 表示する 41plt.show()

イメージ説明

投稿2021/10/21 08:17

NKJSM

総合スコア58

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

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

0

ベストアンサー

3色しかないのであれば、単純に3回scatter描画することでも実現できます。

Pyhton

1import matplotlib.pyplot as plt 2import pandas as pd 3import numpy as np 4 5# テストデータ 6data = np.hstack( [ np.random.randint(0,100, (30,2)), np.random.randint(-1,2, (30,1))]) 7df = pd.DataFrame(data, columns=list('XYA')) 8 9clr = {-1:'red', 0:'green', 1:'blue'} 10for a in set(df['A']): 11 df2 = df[df['A'] == a] 12 c = clr[a] 13 plt.scatter(df2.X, df2.Y, color=c, label=c) 14plt.legend() 15plt.show()

イメージ説明

投稿2021/10/21 07:55

can110

総合スコア38341

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

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

Yuulis

2021/10/22 04:08

回答ありがとうございます! この方法で追記した内容のスクリプトを実行すると、エラーが出てしまったのですが、どうすればいいでしょうか。
can110

2021/10/22 04:18

df["S"]に、colorListのキーに合致しないnan値が入っているのでしょう。 データを確認したうえで、fillnaで0なりキーに存在する値をセットするか nanを含む行はdropすればよいです。
Yuulis

2021/10/22 05:55

DataFrameでdataのcolumsを指定するときに、元のデータに存在していない名前をしていたことが原因で、Aのすべての値がNaNとして登録されてました... 無事解決して散布図が表示されました!ありがとうございました。
guest

0

matplotlib で散布図 (Scatter plot) を描く
カラーマップを指定して、値に応じてマーカーを着色
をお読みください。

投稿2021/10/21 07:11

ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問